Execute o programa C no mintty a partir da linha de comando do windows

0

Eu quero executar um programa em C no mintty e desviar o fluxo de saída stderr para um arquivo, debug.txt. Isso pode ser feito usando:

./zombie_jump 2>debug.txt

No entanto, estou tendo problemas para lançá-lo na linha de comando do Windows.

mintty -s 70,55 ./zombie_jump 2>debug.txt

se comporta como se o 2>debug.txt fosse deixado fora do comando (executando o programa, mas não desviando o fluxo de erro), 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' .

    
por Dimpl 16.04.2016 / 14:21

1 resposta

1

O erro aqui é bem fácil de entender: mintty não encaminha a saída de seus programas para (presumivelmente) cmd , onde o redirecionamento de saída está configurado. Em vez disso, exibe a saída em sua própria janela da GUI. Isso é o que um emulador de terminal é projetado para fazer, afinal. :)

O redirecionamento de saída é um recurso de shell. Se você acabou de executar mintty my_command , você não está usando um shell. Em vez disso, mintty lança diretamente my_command .

Se você citar "my_command 2>out.err" , informará mintty para procurar um comando desse nome (inteiro). É equivalente a digitar "my_command 2>out.err" em um shell regular do Linux. Não vai funcionar de qualquer maneira.

Então, agora que estabelecemos que é um recurso de shell, é claro que precisamos de um shell. Uma escolha comum seria Bash. Bash pode ser passado uma string de comando para executar quando inicia, 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 lançado desta maneira herda o diretório de trabalho que eu tenho em cmd .

    
por 16.04.2016 / 20:28