通过单独端子中的管道输入



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

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

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

我试图通过管道输入退出字符串,但程序没有停止。如果变量没有从管道中获取任何值,我将如何纠正?还是其他问题阻止了退出的发生?

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

#!/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")会将整个文件存储为字符串。因此,即使您在pipe文件中的某个地方exit单词,原始条件if [ "$input" == "exit" ]也是错误的,除非您输入的第一个单词cat>pipe本身是"exit"。

稍微调整的解决方案是像我所做的那样(=~)做正则表达式匹配,但这个解决方案不是很可靠,因为如果您输入类似"我不想退出"的内容,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

相关内容

  • 没有找到相关文章

最新更新