将交互式脚本的stdout传递给自己的stdin

时间:2016-07-16 18:22:28

标签: bash stdout stdin

考虑以下简单的交互式shell脚本:

# tool.sh
echo "Good Morning."
echo "My Name is Mr. Sunshine, I am 100 years old."
echo
echo "So, what's your name?"
read name;
echo "and, whats' your age?"
read age;
echo $name, $age years old > output.txt

假设,此脚本现在应该由另一个脚本以编程方式运行。它就像这样简单:

echo -e "Anton\n28" | bash tools.sh

和voilà,output.txt现在包含“Anton,28岁”。

现在出现了棘手的部分:我想在output.txt中看到“Sunshine先生,100岁”,只需打开一次该工具。

此处的问题是管道的设置,该管道解析工具的输出并直接将部件发送到其输入

解析可以像这样完成:

sed -nr 's/^My Name is (.*), I am (.*) years old\.$/\1\t\2/p'

1 个答案:

答案 0 :(得分:1)

您可以使用命名管道。

mkfifo tools_pipe
cat tools_pipe \
    | ./tools.sh \
    | sed -rnu 's/My Name is (.*), I am (.*) years old\./\1\n\2/p' \
    > tools_pipe
rm tools_pipe # cleanup

命名管道基本上是一个文件,您可以同步读取和写入。 要将工具的输出作为输入提供给工具本身,可以使用命名管道建立此循环连接。