セミコロンで区切られた 1 行ではなく、2 つのコマンドを次々に発行するとどうなるかを観察してください。
パイプを作成してムービーを起動:
$ mkfifo pipe1
$ tail -f /dev/null > pipe1 &
$ cat pipe1 | omxplayer /path/to/video.mp4
トライアル 1 を終了します。
$ echo -n q > pipe1; # Exits movie, but omxplayer hangs
$ echo > pipe1; # Completes exit process
トライアル 2 を終了します。
$ echo -n q > pipe1; echo > pipe1 # Does nothing
トライアル 3 を終了します。
$ echo -n q > pipe1; sleep 1; echo > pipe1 # Works just like trial 1
トライアル 2 が何もしない理由を誰かが説明してくれませんか。echo
また、2 つのステートメントを必要としない、名前付きパイプを介して終了コマンドを発行するより良い方法はありますか?