出力をmpvプレーヤーにストリーミングしていますが、うまく機能します。
streamer -o - | mpv -
しかし、mpvを起動する前にプログラムを終了してからmpvにパイプしたいと思います。
Streamerプログラムはビデオをバッファリングするのに少し時間がかかり、10〜15秒後にmpvに送信されます。この10〜15秒間screen_saverを表示し、ストリームがmpvに送信され始めたら終了したいと思います。
次のコマンドはscreen_saverを終了しますが、mpvは実行しません。
streamer -o - | pkill screen_saver ; mpv -
ベストアンサー1
streamer -o - | { dd bs=1 count=1 2>/dev/null; pkill screen_saver; cat; } | mpv -
の最初のバイトがキャプチャstreamer
され、dd
Beyondを介して渡されます}
。dd
すぐに終了してpkill
実行すると、他のすべてのタスクが完了しますcat
。すべてのストリームが到着する必要がありますmpv
。
これにはpkill
標準出力のサイレントが必要で、何も読み取る必要はありませんstreamer
。私のpkill
ことです。以下の点を確認したい場合があります</dev/null pkill screen_saver >/dev/null
。
一般的なツールを使用してアイデアをテストするには、次の手順を実行します。
cat | { dd bs=1 count=1 2>/dev/null; echo "triggered" >&2; cat; } | cat
そして何かを入力してください。 (最初のものはcat
クリックするまで何も取得できませんEnter。)triggered<newline>
入力の最初のバイトの後に挿入が表示されます。この文字列cat
はstderrに印刷されるため、必要に応じてトリガーが発生することを示すために最後にインポートされたストリームを妨げません。
バイトで動作することに注意してくださいdd
。したがって、入力した最初の文字がマルチバイト(ś
UTF-8など)の場合、コンソールの処理とすれちがいコマンドのstdoutとstderr)。これは、トリガーが文字の途中、最初の文字の直後に発生することを意味します。バイト、正確に設計されているように。