我有一個必須定期運行的腳本(我無法修改),它具有以下結構:
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 上。
我會很感激任何幫助。同樣,我無法修改原始腳本。
uj5u.com熱心網友回復:
您可以使用socat為子行程偽造一個新的偽終端。
讓我們tty.sh成為以下腳本:
#! /bin/bash
read -r response < /dev/tty
if [ "$response" = 'y' ]; then
echo yes
else
echo no
fi
然后您可以通過這種方式將 stdin 連接到子行程的新 pty:
echo y | socat stdio exec:./tty.sh,pty,setsid,echo=0
uj5u.com熱心網友回復:
您可以嘗試使用 autoexpect 為您生成包裝器(自動腳本)腳本:
autoexpect -f autoscript ./myscript.sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/422224.html
標籤:
下一篇:Bash沒有終止python腳本
