我有一个奇怪的情况,Bash似乎没有正确分配我的变量之一,或者可能与管道有关。老实说,我不确定。这是代码:
test=0
if [ "$#" -ne 4 ]; then
echo "Error: You have passed an incorrect number of parameters" > client.pipe
test=1
if [ $test -eq 1 ]; then <-------THIS SOMETIMES DOESN'T EXECUTE
echo "end_result" > client.pipe
exit 1
这是怎么回事,这是命令的服务器脚本:'select'。
select命令采用4个参数:一个id(告诉它要将消息输出到哪个管道),一个数据库名称,一个表名称以及一个列ID字符串。
在客户端管道的另一端,客户端脚本正在侦听消息,如果接收到“ end_result”,它将停止侦听。如您所见,无论发生什么情况,“ end_result”都应发送回管道并由客户端脚本打印,但有时不会发生,而我陷入无限的while循环中。这是客户端脚本,因此您可以查看“监听”发生的位置。
while true; do
read message < client.pipe
if [ "$message" == "end_result" ]; then
echo $message
break
else
echo $message
fi
done
如果我将错误数量的参数传递给第一个脚本,则会向管道输出“错误:您传递了不正确的参数数量”,但有时它没有为测试分配1然后不将“ end_result”发送到管道并退出。我真的看不出问题是什么,正如我所说的那样,它可能在10次中有7次...我可以通过将父脚本发送“ end_result”给客户端来解决此问题,但这是一个一点点的hack。
如果有人能看到问题所在,我将非常感谢,并且很高兴在需要时提供有关代码的更多信息。
非常感谢,R
编辑:
我几乎可以肯定,问题出在从客户端管道读取和while循环中,好像有些东西卡在管道中了...
答案 0 :(得分:0)
这是@WilliamPursell提供的解决方案:
while true; do
read message
if [ "$message" == "end_result" ]; then
echo $message
break
else
echo $message
fi
done < client.pipe