stdout
私は有用な情報を生成し、そこから情報を読むプログラムを持っていますstdin
。標準入力に何も提供せず、標準出力をファイルにリダイレクトしたいと思います。これまではとても素晴らしかったです。できます。
program > output
そしてttyでは何もしないでください。
しかし、問題は、これをバックグラウンドで実行したいということです。私がするなら:
program > output &
プログラムが一時停止します(「一時停止(tty入力)」)。
私がするなら:
program < /dev/null > output &
プログラムはEOFに到達し、すぐに終了します。
program
私が必要とするものは何もせず、不確定な時間の間読んでいないものをパイプに接続するようですstdin
。次の方法が有効です。
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
しかし、それはすべて非常に醜いです。そこ持つ標準のUnixユーティリティを使用して「無限に何もしない」(別の表現で)エレガントな方法ですman true
。どうすればいいですか? (ここでのエレガンスの私の主な基準は、一時ファイルなし、忙しいスタンバイ、または定期的なウェイクアップなし、エキゾチックなユーティリティなし、できるだけ短いです)。
ベストアンサー1
私の考えでは、あなたはこれより良くなるとは思わない。
tail -f /dev/null
あなたはそれを提案しました(これが内部的にinotifyを使用していると仮定すると、ポーリングや目覚めがあってはいけないので、奇妙に見える以外は十分です)。
あなたは無限に実行され、標準出力を開いたままにしていますが、実際には標準出力に何も書き込まず、標準入力が閉じられたときに終了しないユーティリティが必要です。同様のものがyes
実際に標準出力に書き込まれます。 cat
標準入力が閉じると(またはリダイレクトされた内容が完了すると)終了します。私はsleep 1000000000d
それがうまくいくと思いますが、tail
明らかに良いです。私のDebianボックスには、tailf
コマンドを少し短くするコマンドがあります。
他の戦略を取り、プログラムを実行するのはどうですかscreen
?