Bash

如何使用expect命令和.run程序替換yes命令

  • February 17, 2021

我正在嘗試執行的program.run :

  • 提出 2 個需要回答“y”的問題
  • 最後問第三個問題,即“按任意鍵退出”

在此處輸入圖像描述

此外,它沒有“-y”選項。只有這個選項:

FreeFileSync installation parameters:
-h, --help    Show help
--directory   Change installation directory e.g. --directory /opt/FFS
--noshortcuts  Don't create desktop shortcuts

這些命令都不起作用:

yes | sudo ./program.run
yes y | sudo ./program.run
sudo sh -c 'yes y | ./program.run'
echo y | sudo ./program.run
# etc, etc

在此處輸入圖像描述

由於“是”命令似乎不起作用,我想嘗試其他任何東西

這個答案中,說:“.run 命令只是一組將由 sh 執行的命令。特定的 .run 文件可能需要 -y 選項,但通常你不能指望它。如果你需要自動化一些東西,考慮使用Expect

但我不知道如何使用Expect。一些幫助?

發行版:Ubuntu Mate 20.04 LTS

Bash 5.0.17(1)-release (x86_64-pc-linux-gnu)

更新:

我已經在官方網站上發布了這個問題,開發人員宣佈在下一個版本中他們將添加參數:

./program.run --accept-license

expect將是:

#!/usr/bin/expect

set timeout -1
log_user 0
spawn ./FreeFileSync_11.6_Install.run
log_user 1

expect -exact "\r
Accept the FreeFileSync license terms? (Enter 's' to show them) \[y/n/s\] "
send -- "y\r"
expect -exact "y\r
Install FreeFileSync into /opt/FreeFileSync? \[Y/n\] "
send -- "Y\r"
expect -exact "https://freefilesync.org/donate\r
\r"

跑:

$ sudo ./expect-script
[sudo] password for user:

Accept the FreeFileSync license terms? (Enter 's' to show them) [y/n/s] y
Install FreeFileSync into /opt/FreeFileSync? [Y/n] Y

-> Installing to: /opt/FreeFileSync
-> New console command: freefilesync
-> Registering file extensions: *.ffs_gui, *.ffs_batch, *.ffs_real

All done!

     (\_/)
 (  =(^Y^)=
  \_(m___m)

Get the Donation Edition with bonus features and help keep FreeFileSync ad-free.
https://freefilesync.org/donate

引用自:https://serverfault.com/questions/1053877