我有點困惑,昨天我有這個工作,但它只是停止接受重定向標準輸入,幾乎神奇。重定向應用程序(java)的輸入,但仍然允許stdin在BASH中
set -m
mkfifo inputfifo
mkfifo inputfifo_helper
((while true; do cat inputfifo; done) > inputfifo_helper)&
trap "rm -f inputfifo inputfifo_helper java.pid; kill $!" EXIT
exec 3<&0
(cat <&3 > inputfifo)&
NOW=$(date +"%b-%d-%y-%T")
if ! [ -d "logs" ]; then
mkdir logs
fi
if [ -f "server.log" ]; then
mv server.log logs/server-$NOW.log
fi
java <inputfifo_helper -jar $SERVER_FILE & echo $! > java.pid && fg
這是運行良好,我可以附和事情inputfifo和應用得到了它,並把它的控制檯,以及我可以直接輸入。它甚至通過屏幕。絕對沒有代碼明智的改變,但重定向的標準輸入已停止工作。我嘗試將文件描述符更改爲9,甚至127,但都沒有修復它。
我忘了什麼嗎?是否有一個特定的原因導致它不再有效? (我使用這個來代替發送輸入到屏幕本身,因爲我開始分離屏幕,它拒絕接收輸入,除非它至少連接了一次,我不知道這是一個錯誤還是打算)
小心解釋爲什麼需要_helper fifo? – Ingo 2011-03-25 00:14:13
我真的不記得了,但我懷疑它對我的重定向有任何影響。這個過程或屏幕的行爲就像他們被直接鍵入(鍵入什麼也不做),雖然就像我說的,它以前工作得很好。 – Dragonshadow 2011-03-25 00:59:59