Я хочу запустить программу 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
.