我创建了一个像
这样的命名文件描述符Obj
现在我要关闭它:
exec {gui_outfd}<>$gui_outpipe
这会产生
exec {gui_outfd}>&-
我做错了什么?
我的剧本中编辑第330-357行:
./game.sh: line 338: read: 14: invalid file descriptor: Bad file descriptor
被叫函数:
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
答案 0 :(得分:3)
......的组合
exec {gui_outfd}>&-
...之后没有进一步重定向或修改$gui_outfd
......
read -u $gui_outfd line || echo "nothing read"
......注定要像你描述的那样完全失败。
一旦进程关闭文件描述符,该进程此后就不能使用该FD,除非将其与新的打开文件描述相关联。这与任何其他可能具有相同文件打开的进程无关,或者与关闭其FD的那些进程的关系有什么关系。
在完成之前不要关闭FD。