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

831
Dimpl

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

0
Кажется, проблема в том, что `mintty` требует отдельных параметров для команды, которую она запускает, поэтому вам нужно заключить в кавычки перенаправление. Без кавычек перенаправление применяется к самому mintty, который, я думаю, устанавливает новые стандартные пути ввода / вывода. Если вы включите перенаправление в те же кавычки, что и команда, тогда это будет целая команда, ищущая одно имя со встроенными пробелами и символами перенаправления. Одиночные кавычки не имеют особого значения в `cmd`, отсюда и ваш последний результат. AFH 8 лет назад 0
Два предложения: `mintty -s 70,55 ./zombie_jump" 2> debug.txt "`, чтобы остановить перенаправление в `cmd`; если это не удалось, создайте `. / zombie_noerrs`, содержащий` ./zombie_jump 2> debug.txt`, и запустите `mintty -s 70,55. / zombie_noerrs`. AFH 8 лет назад 0
К сожалению, первое предложение не работает, тот же результат, что и моя вторая попытка выше. Второй вариант тоже не оптимален, так как я пытаюсь найти команду, которую можно использовать с Sublime Text 2 для запуска текущего файла, над которым я работаю. Dimpl 8 лет назад 0

1 ответ на вопрос

1
Daniel B

The error here is quite easy to understand: mintty doesn’t forward your programs output to (presumably) cmd, where the output redirection is set up. Instead, it displays output in its own GUI window. That’s what a terminal emulator is designed to do, after all. :)

Output redirection is a shell feature. If you just run mintty my_command, you’re not using a shell at all. Instead, mintty directly launches my_command.

If you quote "my_command 2>out.err", you’re telling mintty to look for a command of that (whole) name. It is equivalent to typing "my_command 2>out.err" in a regular Linux shell. Won’t work either way.

So now that we’ve established it’s a shell feature, it’s clear we need a shell. A common choice would be Bash. Bash can be passed a command string to execute when it starts, like this:

bash -c "my_command 2>out.err" 

That means we can use it like this with mintty:

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

On my machine, the Cygwin Bash shell launched this way inherits the working directory I have in cmd.

Большое спасибо за детали, это отличный ответ. Когда я попробовал bash (http://chat.stackexchange.com/rooms/38465/discussion-between-dimpl-and-davidpostill), я пропустил опцию -c, поэтому получил "нет такого файла или каталога" и "не могу" выполнить ошибки двоичного файла. Dimpl 8 лет назад 0

Похожие вопросы