Запустить программу C в Mintty из командной строки Windows

Запустить программу C в Mintty из командной строки Windows

Я хочу запустить программу C в mintty и перенаправить stderrвыходной поток в файл debug.txt. Это можно сделать с помощью:

./zombie_jump 2>debug.txt

Однако у меня возникли проблемы с запуском этой программы из командной строки Windows.

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

ведет себя так, как будто 2>debug.txtкоманда была оставлена ​​без выполнения (программа запущена, но поток ошибок не перенаправлен), и

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

ведет себя так, как будто я отправил "./zombie_jump 2>debug.txt", что приводит к ошибке Failed to run ./zombie_jump 2>debug.txt: No such file or directory.

Какую команду мне следует использовать?

Редактировать:

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

возвращается Failed to run ./zombie_jump : No such file or directoryи создает файл с именем debug.txt'.

решение1

Ошибку здесь понять довольно легко: minttyне перенаправляет вывод ваших программ в (предположительно) cmd, где настроено перенаправление вывода. Вместо этого он отображает вывод в своем собственном окне GUI. В конце концов, именно для этого и предназначен эмулятор терминала. :)

Перенаправление вывода — это функция оболочки. Если вы просто запустите mintty my_command, вы вообще не используете оболочку. Вместо этого minttyнапрямую запускает my_command.

Если вы цитируете "my_command 2>out.err", вы говорите minttyискать команду с этим (полным) именем. Это эквивалентно вводу "my_command 2>out.err"в обычной оболочке Linux. Не сработает в любом случае.

Итак, теперь, когда мы установили, что это функция оболочки, ясно, что нам нужна оболочка. Обычным выбором будет Bash. Bash можно передать командную строку для выполнения при запуске, например:

bash -c "my_command 2>out.err"

Это значит, что мы можем использовать его следующим образом mintty:

mintty /bin/bash -c "my_command 2>out.err"

На моем компьютере оболочка Cygwin Bash, запущенная таким образом, наследует рабочий каталог, который у меня есть в cmd.

Связанный контент