Quiero ejecutar un programa C en mintty y desviar el stderr
flujo de salida a un archivo, debug.txt. Esto se puede lograr usando:
./zombie_jump 2>debug.txt
Sin embargo, tengo problemas al iniciar esto desde la línea de comandos de Windows.
mintty -s 70,55 ./zombie_jump 2>debug.txt
se comporta como si se 2>debug.txt
hubiera dejado fuera del comando (ejecutando el programa pero sin desviar el flujo de error), y
mintty -s 70,55 "./zombie_jump 2>debug.txt"
se comporta como si hubiera enviado "./zombie_jump 2>debug.txt", produciendo el error Failed to run ./zombie_jump 2>debug.txt: No such file or directory
.
¿Qué comando debería usar?
Editar:
mintty -s 70,55 './zombie_jump 2>debug.txt'
regresa Failed to run ./zombie_jump : No such file or directory
y crea un archivo llamado debug.txt'
.
Respuesta1
El error aquí es bastante fácil de entender: mintty
no reenvía la salida de su programa (presumiblemente) cmd
, donde está configurada la redirección de salida. En cambio, muestra el resultado en su propia ventana GUI. Después de todo, para eso está diseñado un emulador de terminal. :)
La redirección de salida es una característica del shell. Si simplemente ejecuta mintty my_command
, no estará usando ningún shell. En su lugar, mintty
lanza directamente my_command
.
Si cita "my_command 2>out.err"
, le está indicando mintty
que busque un comando con ese nombre (completo). Es equivalente a escribir "my_command 2>out.err"
en un shell de Linux normal. No funcionará de ninguna manera.
Ahora que hemos establecido que es una característica del shell, está claro que necesitamos un shell. Una opción común sería Bash. A Bash se le puede pasar una cadena de comando para ejecutar cuando se inicia, como esta:
bash -c "my_command 2>out.err"
Eso significa que podemos usarlo así con mintty
:
mintty /bin/bash -c "my_command 2>out.err"
En mi máquina, el shell Cygwin Bash iniciado de esta manera hereda el directorio de trabajo que tengo en cmd
.