我有script.sh
:
while [ 1 ]
echo $(($RANDOM % 21))
done
我的可执行文件./a.out
包含已编译的C代码,这是一款游戏,输入的数字介于1到20之间:
我像那样测试我的游戏:
./script.sh | ./a.out
游戏运行良好,直到完成并停止参加stdin参数,并且:
echo: write error: Broken pipe
在这种情况下如何不破管?如何获取我必须停止回应的信息?
答案 0 :(得分:1)
检查标准输出是否可写。如果写入失败,请退出循环。
while true; do
echo $((RANDOM % 21)) || exit
done
(顺便说一下,while [ 1 ]
可能没有按照你的想法行事。[
aka test
如果它的argurent不是一个空字符串,则产生一个真值。它有效, 当然,但写while true
不是一种特别优雅或惯用的方式。)
我无法重现您的问题,但另一种常见的解决方法是禁用陷阱。
trap - SIGPIPE
(也许还要注意RANDOM
在算术上下文中不需要显式的美元符号。)