私は少し混乱しています。これは昨日機能していましたが、ほとんど魔法のように、リダイレクトされた stdin の受け入れを停止しました。
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 に変更しようとしましたが、どちらも修正されませんでした。
私は何かを忘れていますか?壊れて機能しなくなった特定の理由はありますか?
(画面を切り離して起動し、少なくとも一度接続されていない限り入力の受信を拒否するため、画面自体に入力を送信する代わりにこれを使用しています。これがバグなのか意図されたものなのかはわかりません)