您好我正在尝试用bash构建一个程序。我的想法是打开两个终端。可以使用管道cat > pipe
获取输入。另一个终端将运行带有while true循环的bash脚本并从管道读取输入。输入将存储到变量中,并且将根据存储在内部的内容进行进一步的操作。这就是我的尝试。
程序将管道名称作为参数获取,并将其存储到变量管道中。
while true; do
input=$(cat<$pipe)
if [ "$input" == "exit" ]; then
exit 0
fi
done
我试图通过管道输入一个退出字符串,但程序没有按原样停止。如果变量没有从管道中获取任何值,我将如何纠正?或者是否有其他错误阻止退出?
答案 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