按任意键从另一个脚本继续

时间:2018-01-16 16:21:53

标签: linux bash shell

我挣扎的比我预期的更多"简单"问题。我有两个脚本,"一个"和"两个"。 "两个"打电话"一个"并逐行读取其输出,并在一个点上"一个"等待输入。我该如何制作"两个"模拟按键继续? 无论我尝试什么,它都会卡在"按任意键继续"消息。

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)

3 个答案:

答案 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