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

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

程序运行我正在尝试运行:

  • 提出 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 选项,但一般来说你不能依赖它。如果你需要自动化某些操作,请考虑使用预计

但我不知道如何使用预计。 一些帮助?

发行版:Ubuntu Mate 20.04 LTS

Bash 5.0.17(1)-发布 (x86_64-pc-linux-gnu)

更新:

我已将此问题发布在官方网站上,开发人员宣布在下一个版本中他们将添加参数:

./program.run --accept-license

答案1

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

答案2

如果我想为以下3个问题提供自动答案:

y< 输入 >

y< 输入 >

< 输入 >

我会使用类似的东西:

printf "y\ny\n\n" | sudo ./program.run

相关内容