我挣扎的比我预期的更多"简单"问题。我有两个脚本,"一个"和"两个"。 "两个"打电话"一个"并逐行读取其输出,并在一个点上"一个"等待输入。我该如何制作"两个"模拟按键继续? 无论我尝试什么,它都会卡在"按任意键继续"消息。
one.sh:
echo pre
echo "Press any key to continue"
read -n 1 -s -r -p ""
echo post
two.sh:
{
while read -r line; do
echo $line
if echo $line | grep "Press enter" &> /dev/null; then
printf "\r"
fi
done
} < <(./one.sh)
非常感谢任何帮助。
修改
我使用命名管道修复了它,正如Todd A. Jacobs所说。脚本看起来像这样:
one.sh:
mkfifo mypipe
echo pre
echo "Press any key to continue"
read -n 1 -s -r -p ""<mypipe
echo post
two.sh:
{
while read -r line; do
echo $line
if echo $line | grep "Press enter" &> /dev/null; then
echo >mypipe
fi
done
} < <(./one.sh)
答案 0 :(得分:2)
您可以将输入从one.sh
传送到two.sh
。请参阅下面的示例。
<强> one.sh 强>
echo "Running one.sh...";
echo "Enter your name: ";
read name;
echo "Hello $name..!!";
echo "End one.sh";
<强> two.sh 强>
echo "Running two.sh...";
name=World
echo $name | ./one.sh;
echo "End two.sh";
但是,如果您的应用程序(two.sh
)需要与另一个命令行应用程序(one.sh
)进行多次交互,那么您可以使用expect。
答案 1 :(得分:1)
并且在某一时刻“一”等待输入
如果one.sh只想要一次击键,你就可以向它输出一些东西......
{ ...
} < <(echo y | ./one.sh)
答案 2 :(得分:0)
如果您不在乎用户按下什么以继续使用暂停。它会暂停脚本,直到用户按下按钮。
echo "Press any key to continue"
pause
echo post