通过管道在单独的终端输入

时间:2016-05-24 14:01:06

标签: linux bash terminal

您好我正在尝试用bash构建一个程序。我的想法是打开两个终端。可以使用管道cat > pipe获取输入。另一个终端将运行带有while true循环的bash脚本并从管道读取输入。输入将存储到变量中,并且将根据存储在内部的内容进行进一步的操作。这就是我的尝试。

程序将管道名称作为参数获取,并将其存储到变量管道中。

while true; do
      input=$(cat<$pipe)
      if [ "$input" == "exit" ]; then
           exit 0
      fi
done

我试图通过管道输入一个退出字符串,但程序没有按原样停止。如果变量没有从管道中获取任何值,我将如何纠正?或者是否有其他错误阻止退出?

1 个答案:

答案 0 :(得分:0)

你的第二个脚本应该是这样的:

#!/bin/bash
pipe="$1" # Here $1 is full path to the file pipe as you have confirmed
while true
  do
input=$(cat<"$pipe")
if [[ $input =~ exit ]] #original line was if [ "$input" == "exit" ]
  then
exit 0
fi
done

记住$(cat<"$pipe")会将整个文件存储为字符串。因此,即使exit文件中的某个地方有pipe,原始条件if [ "$input" == "exit" ]也将为假,除非您为cat>pipe本身输入的第一个单词是&#34;退出&#34;。

一个小小的调整解决方案是像我一样做正则表达式匹配(=~)但是这个解决方案不是很可靠,因为如果你输入类似&#34;我不想退出&#34;,对于cat>pipe,第二个脚本将退出。

第二种解决方案是:

#!/bin/bash
pipe="$1"
while true; do
input=$(tail -n1 "$pipe") #checking only the last line
if [[ "$input" == "exit" ]] #original if condition
  then
exit 0
fi
done