特定のストリーム(次の場合はstdin)でEOFを読み取ると自動的に終了するプログラムがあります。
次に、名前付きパイプを作成し、プログラムの標準入力をそれに接続するシェルスクリプトを作成します。その後、スクリプトは、パイプへの書き込みを数回使用echo
し、cat
(自動的にEOF彼らの出口を生成し、他のツールを)。私が直面している問題は、最初の処理echo
が完了すると、EOFをパイプに送信してプログラムを終了させることです。このようなものを使用tail -f
すると、プログラムを終了しようとするときにEOFを送信できません。私はバランスの取れた解決策を研究していますが、無駄です。
EOFを防ぐ方法とEOFを手動で送信する方法の両方をすでに見つけましたが、それらを組み合わせることができません。ヒントはありますか?
#!/bin/sh
mkfifo P
program < P & : # Run in background
# < P tail -n +1 -f | program
echo some stuff > P # Prevent EOF?
cat more_stuff.txt > P # Prevent EOF?
send_eof > P # How can I do this?
# fg
exec 3>P
はbashでハングアップする原因です、なぜですか?