我有一个脚本(无法修改),需要定期运行,其结构如下:
read -r response < /dev/tty
if [ "$response" = 'y' ]; then
...
我想包装这个脚本,以便我总是向其发送一个 "y" 字符。我尝试使用发送 yes 的标准技巧来运行脚本:
echo y | '/bin/bash /path/to/script'
并且
yes | ./myscript
并且
printf "y\n" | ./myscript
和
/bin/bash /path/to/script < /path/to/y-file
这些方法都没有生效。我还尝试了expect
。
目前不清楚Mac OS X内置的expect是否可用;启用expect诊断信息后,expect能够正确地检测到提示符并响应,但脚本随后终止。
#!/bin/bash
set timeout -1
SCRIPT="~/myscript"
expect -d <<EOF
spawn $SCRIPT
expect "prompt string"
send "y\r"
EOF
另外需要澄清的是,这是在 Mac OS X Monterey 上。
非常感谢任何帮助。再次强调,我无法修改原始脚本。
expect
。 - Andreas Louvyes
命令(默认情况下它会发送字符 y,但您也可以指定其他消息)。您可以这样调用它:yes | script.sh
。 - Aserresocat
的方法,但是我无法成功执行,可能是因为我不理解我在做什么。也许expect
至少可以解决这个问题。 - tripleee