Quero executar um programa C em mintty e desviar o stderr
fluxo de saída para um arquivo, debug.txt. Isso pode ser feito usando:
./zombie_jump 2>debug.txt
No entanto, estou tendo problemas para iniciar isso na linha de comando do Windows.
mintty -s 70,55 ./zombie_jump 2>debug.txt
se comporta como se o 2>debug.txt
comando tivesse sido deixado de fora (executando o programa, mas não desviando o fluxo de erros), e
mintty -s 70,55 "./zombie_jump 2>debug.txt"
se comporta como se eu tivesse enviado "./zombie_jump 2>debug.txt", produzindo o erro Failed to run ./zombie_jump 2>debug.txt: No such file or directory
.
Qual comando devo usar?
Editar:
mintty -s 70,55 './zombie_jump 2>debug.txt'
retorna Failed to run ./zombie_jump : No such file or directory
e cria um arquivo chamado debug.txt'
.
Responder1
O erro aqui é bastante fácil de entender: mintty
não encaminha a saída do seu programa para (presumivelmente) cmd
, onde o redirecionamento de saída está configurado. Em vez disso, ele exibe a saída em sua própria janela GUI. Afinal, é para isso que um emulador de terminal foi projetado. :)
O redirecionamento de saída é um recurso do shell. Se você apenas executar mintty my_command
, não estará usando nenhum shell. Em vez disso, mintty
inicia diretamente o my_command
.
Se você citar "my_command 2>out.err"
, você está dizendo mintty
para procurar um comando com esse nome (completo). É equivalente a digitar "my_command 2>out.err"
um shell normal do Linux. Não funcionará de qualquer maneira.
Agora que estabelecemos que é um recurso de shell, está claro que precisamos de um shell. Uma escolha comum seria Bash. Bash pode receber uma string de comando para ser executada quando for iniciado, assim:
bash -c "my_command 2>out.err"
Isso significa que podemos usá-lo assim com mintty
:
mintty /bin/bash -c "my_command 2>out.err"
Na minha máquina, o shell Cygwin Bash iniciado dessa forma herda o diretório de trabalho que tenho no arquivo cmd
.