Ejecute el programa C en mintty desde la línea de comando de Windows

Ejecute el programa C en mintty desde la línea de comando de Windows

Quiero ejecutar un programa C en mintty y desviar el stderrflujo 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.txthubiera 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 directoryy crea un archivo llamado debug.txt'.

Respuesta1

El error aquí es bastante fácil de entender: minttyno 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, minttylanza directamente my_command.

Si cita "my_command 2>out.err", le está indicando minttyque 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.

información relacionada