Por que o grep não funciona neste comando?

5

Eu tenho o GTA San Andreas rodando no Wine, embora quando eu saio do jogo ele trava no terminal, e o processo ainda tem recursos restantes, o que faz com que ele não saia. Então, eu fiz este comando, que acho que vai repetir as linhas na saída do jogo e matá-lo quando encontrar recursos restantes:

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'

E eu tenho essa saída do gta_sa.exe antes de ser interrompida:

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).

No entanto, isso não funciona e o processo continua travado. Por que esse comando não funciona?

Por favor note: isto não é uma questão sobre o Wine, é sobre o script que eu fiz.

    
por jadenPete 16.06.2016 / 19:48

1 resposta

11

Do caractere da saída de wine concluo que é algum tipo de mensagem de erro, portanto, provavelmente é redirecionado para stderr, não stdout. Nesse caso, o pipe não transmite a mensagem e o próximo comando ( while ) não tem nada em sua entrada. Para superar o problema, você precisa, por exemplo, redireciona stderr de wine para stdout adicionando 2>&1 na frente do canal | .

    
por 16.06.2016 / 20:19

Tags