Intereting Posts

Почему в этой команде не будет работать grep?

У меня есть GTA San Andreas, работающий в Wine, хотя, когда я выхожу из игры, он висит в терминале, и процесс все еще имеет оставшиеся ресурсы, из-за чего он не выходит. Поэтому я сделал эту команду, которая, как я думаю, будет перебирать строки в результатах игры и убивать ее, когда она найдет оставшиеся ресурсы:

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 я заключаю, что это какое-то сообщение об ошибке, поэтому, вероятно, перенаправляется на stderr, а не на stdout. В этом случае труба не передает сообщение, а следующая команда ( while ) ничего не имеет на своем входе. Чтобы преодолеть эту проблему, вам нужно, например, перенаправить stderr на stdout, добавив 2>&1 перед трубой | ,