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

1

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

Перенаправление вывода - это функция оболочки. Если вы просто запускаете 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .