考虑以下简单的交互式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'
答案 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
命名管道基本上是一个文件,您可以同步读取和写入。 要将工具的输出作为输入提供给工具本身,可以使用命名管道建立此循环连接。