for elem in {1..99} ; do echo $elem> mypipe ; done
这段 bash 代码应该通过管道传递 99 个整数,之前在另一个终端上有这样的设置:
cat <mypipe
有人知道为什么我有时只能通过管道传递随机 (少于 99) 个整数,之后它就会挂起吗?我必须用Ctrl+终止脚本c,然后收到以下消息:
bash: mypipe: Interrupted system call
我正在运行 Ubuntu 11.10。
答案1
您的代码存在一个问题,即> mypipe
会打开 fifo,写入数据,然后关闭它。一旦在任一端关闭它,您都必须在两个都结束。因此,不要每次回显时都重新打开 fifo,而是在整个循环中保持打开状态。
for elem in {1..99}; do echo "$elem"; done > mypipe
顺便说一句,代替那个 for 循环,您只需使用一个 printf 即可。
printf '%s\n' {1..99} > mypipe
如果你的情况更复杂,你可以为其分配一个 fd。
exec 3> mypipe # opens mypipe for writing on fd 3
echo "stuff" >&3
echo "more stuff" >&3
...
exec 3>&- # closes fd 3