【发布时间】:2022-01-26 02:38:28
【问题描述】:
我有一个必须定期运行的脚本(我无法修改),它具有以下结构:
read -r response < /dev/tty
if [ "$response" = 'y' ]; then
...
我想包装这个脚本,这样我总是向它发送一个“y”字符。我尝试使用标准技巧运行脚本以发送是:
echo y | '/bin/bash /path/to/script'
和
yes | ./myscript
和
printf "y\n" | ./myscript
和
/bin/bash /path/to/script < /path/to/y-file
这些都不起作用。我也试过了。
目前尚不清楚 Mac OS X 的内置期望是否正常工作;启用期望诊断信息后,期望正确检测到提示并做出响应,但脚本随后终止。
#!/bin/bash
set timeout -1
SCRIPT="~/myscript"
expect -d <<EOF
spawn $SCRIPT
expect "prompt string"
send "y\r"
EOF
另外,澄清一下,这是在 Mac OS X Monterey 上。
如果有任何帮助,我将不胜感激。同样,我无法修改原始脚本。
【问题讨论】:
-
大家可以随时关注
expect -
如果你只想连续发送一个字符序列,你也可以使用
yes(默认发送字符y,但你也可以指定另一个消息)。你可以这样称呼它:yes | script.sh -
这些建议仅适用于读取标准输入的内容,根据定义,此处并非如此。
-
stackoverflow.com/questions/32910661/… 和链接的问题似乎很有帮助,但并不是一个有效的解决方案。我尝试了
socat之一,但我无法成功,但可能我不明白我在做什么。可能expect至少可以解决这个问题。