grepがこのコマンドで機能しないのはなぜですか?

grepがこのコマンドで機能しないのはなぜですか?

私はWineでGTA San Andreasを実行しています。ただし、ゲームを終了するとターミナルに停止し、プロセスにまだリソースが残っているため終了できません。だから私は次のコマンドを作成しましたが、ゲーム出力の行を繰り返して、残りのリソースを見つけたら終了すると思いました。

bash -c 'cd /opt/GTA/San-Andreas && wine ./gta_sa.exe | while read line; do if [[ $(echo $line | grep -i "leftover resource") ]]; then killall gta_sa.exe; exit; fi; done'

gta_sa.exe が停止する前に、次の出力が表示されます。

fixme:d3d:wined3d_device_uninit_3d Something's still holding the implicit swapchain.
fixme:d3d:wined3d_device_decref Device released with resources still bound, acceptable but unexpected.
fixme:d3d:wined3d_device_decref Leftover resource 0x539a5e8 with type WINED3D_RTYPE_TEXTURE_2D (0x2).
fixme:d3d:wined3d_device_decref Leftover resource 0x1b8ea8 with type WINED3D_RTYPE_TEXTURE_2D (0x2).
fixme:d3d:wined3d_device_decref Leftover resource 0x1b8cb0 with type WINED3D_RTYPE_TEXTURE_2D (0x2).
fixme:d3d:wined3d_device_decref Leftover resource 0x1b74b8 with type WINED3D_RTYPE_TEXTURE_2D (0x2).

しかし、動作しませんし、プロセスはまだ中断されます。このコマンドが機能しないのはなぜですか?

注:これはWineに関する質問ではなく、私が作成したスクリプトに関する質問です。

ベストアンサー1

出力の文字を通して、wine私はこれが一種のエラーメッセージなので、おそらくstdoutではなくstderrにリダイレクトされると結論付けました。この場合、パイプはメッセージを送信せず、while次のコマンド()の入力には何もありません。この問題を解決するには、パイプの前にを追加してwinestderrをstdoutにリダイレクトする必要があります。2>&1|

おすすめ記事