我创建了这样一个命名的文件描述符
exec {gui_outfd}<>$gui_outpipe现在我要关闭它:
exec {gui_outfd}>&-这会产生
./game.sh: line 338: read: 14: invalid file descriptor: Bad file descriptor我做错了什么?
在我的脚本中编辑第330-357行:
run_gui & gui_pid=$!
run_ai1 & ai1_pid=$!
exec {gui_outfd}>&-
while true; do
echo "Started the loop"
while true; do
eval $(isalive2 $gui_pid $ai1_pid)
read -u $ai1_outfd line || echo "Nothing read"
if [[ $line ]]; then # line 338
echo "Piping to GUI $line"
echo "$line" >&$gui_infd
if [[ "$line" == "END_TURN" ]]; then
break
fi
fi
done
echo TURNCHANGED
while true; do
read -u $gui_outfd line || echo "nothing read"
if [[ $line ]]; then
echo "Piping to AI $line"
echo "$line" >&$ai1_infd
if [[ "$line" == "END_TURN" ]]; then
break
fi
fi
done
done和所谓的职能:
run_gui()
{
exec "$GAME_BIN" $args <&$gui_infd >&$gui_outfd
}
run_ai1()
{
exec "$ai1" <&$ai1_infd >&$ai1_outfd
}发布于 2016-05-31 21:58:57
结合..。
主管{gui_outfd}>&-
..。在没有进一步的重定向或修改$gui_outfd的情况下
阅读-u $gui_outfd行\回显“无读取”
..。就像你说的那样注定要失败。
一旦一个进程关闭了一个文件描述符,该进程就不能使用该FD,除非将它与一个新的打开的文件描述相关联。这与任何可能打开相同文件的其他进程无关,也与这些进程与关闭其FD的进程之间的关系无关。
不要关闭FD,直到你完成它。
https://stackoverflow.com/questions/37553041
复制相似问题