嗨,我正在尝试用 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