2017-01-22 3 views
0

Я запускаю Windows 10 и пытаюсь сохранить вывод ошибки файла test.sh в текстовый файл. Итак, я создал файл test.sh и написал в нем нечеткую команду (т. Е. «Blablubb»)..sh вывод в файл .txt - что я делаю неправильно?

После этого я открываю терминал (cmd.exe), переключаюсь в каталог и печатаю test.sh 2>> log.txt.

В окне заголовка открывается окно «/ usr/bin/bash --login -i \ test.sh», которое показывает мне «bash: blablubb: command not found», а затем немедленно закрывается.

Я хочу сохранить этот вывод, потому что окно bash просто открывается на долю секунды. Каждый поиск в Google приводит меня к сайтам, говорящим о перенаправлении вывода, и Stream2 ist STDERR, и поэтому я должен использовать test.sh 2>> log.txt или что-то знакомое, которое заботится о потоке STDERR.

Если бы я попробовать то же самое с файлом test.sh и содержимым:

#!/bin/bash echo hi there

я получаю выход в открытый кратко Баш-окна:

bash: #!/bin/bash: No such file or directory hi there

Но файл log.txt пуст.

Если у меня есть только echo hi there в файле test.sh, я получаю bash: echo: command not found в окне bash. Log.txt также пуст.

Если я введите следующую непосредственно в терминале, выход записывается в log.txt:

echo hi > log.txt 2>&1

Если я типа непосредственно в терминале:

echdo hi > log.txt 2>&1

Я получаю «Der Befehl» echdo «ist entweder falsch geschrieben oder konnte nicht gefunden werden». в файле log.txt.

Таким образом, я предполагаю, что перенаправление вывода работает нормально до тех пор, пока я не буду использовать test.sh. Я знаю, что .sh-файлы - это что-то из мира unix, и проблема может быть там, но я не знаю, почему я не могу перенаправить вывод, кратко отображаемый в bash-console, в текстовый файл.

ответ

0

Синтаксис перенаправления 2>> работает только в том случае, если интерпретируется командная строка, содержащая этот синтаксис by bash. Таким образом, это не будет работать из командной строки Windows, даже если программа, которую вы запускаете, записывается в bash. К тому времени, когда bash работает, слишком поздно; он получает аргументы, поскольку они были интерпретированы CMD или любым вашим интерпретатором команд Windows. (В этом случае я предполагаю, что это означает, что скрипт оболочки найдет аргумент командной строки [] со значением «2».)

Если вы откроете окно bash (или просто введите bash в команда 1), а затем введите test.sh 2>>log.txt в командной строке , что shell, оно поместит сообщение об ошибке в файл, как вы ожидаете.

I думаю вы также можете сделать это за один шаг, набрав bash -c "test.sh 2>>log.txt" в командной строке Windows, но я не уверен; Котировка Windows отличается от котировки * nix, и это может привести к завершению буквенных кавычек до bash, что не сработает.

Обратите внимание, что CMD имеет синтаксис 2>>, а также, и если вы пытаетесь запустить несуществующее окно команды с 2>>errlog.txt, то «не распознаются» сообщение об ошибке переходит к файлу. Я думаю, проблема возникает из-за того, что CMD и bash не согласны с тем, что означает «стандартная ошибка», поэтому перенаправление вывода ошибки из Windows не позволяет получить выход ошибки bash. Но это просто предположение; У меня нет настройки bash-on-Windows, удобной для тестирования.

+0

Теперь я знаю свою проблему! Путаница началась, не зная о различиях в командной строке. Любое черное окно - это просто терминал или командная строка для меня. Shell, bash, партия и т. Д. Еще не открытая книга для меня. – greeven

+0

Cmd имеет свой собственный синтаксис перенаправления. – Basilevs

0

Это поможет узнать, используете ли вы подсистему Windows для Linux (бета-версия). Или если вы делаете что-то еще. Я предполагаю, что это то, что вы делаете в окнах 10.

Если это так, вы используете bash для запуска скрипта?

Вы используете win-bash?

Если это win-bash, я не очень хорошо знаком и рекомендую подсистему Windows для Linux (бета-версия) по следующим причинам. win-bash, в то время как классный, может быть несовместим с операторами перенаправления, такими как 2 >>.

У вас есть stdout и stderr, по умолчанию (если вы не укажете), то >> (или append) будет только добавлять стандартный вывод в txt-файл.

Если вы используете 2, он добавит стандартную ошибку в файл txt. Пример: test.sh 2 >> log.txt

Это может быть лучше описано здесь site.

Чтобы получить именно команду для добавления как stdout, так и stderr, перейдите к этому page.

Пожалуйста, сообщите мне, не отвечает ли это на ваш вопрос. Кроме того, было бы более полезно сначала попытаться найти этот ответ и объяснить, почему ваш поиск ничего не нашел или не дал более подробного разъяснения относительно проблемы. Мне нравится отвечать на вопросы и помогать, но создание новой страницы форума, которая может быть легким ответом, может оказаться неэффективной. У меня был интересный вопрос. Надеюсь, что я помог.

+0

спасибо. Я уже искал его и пробовал test.sh 2 >> log.txt, но это только создает пустой файл. Я также пробовал такие вещи, как «test.sh >> log.txt 2> & 1» без успеха. – greeven

+0

Если мне нужно предоставить дополнительную информацию, пожалуйста, дайте мне знать. – greeven

+0

Вы используете win-bash? Если вы работаете с .sh-файлом в cmd, вам придется иметь что-то еще, помогающее запустить его. Я бы включил то, что вы уже пробовали, и то, что вы установили для запуска .sh в cmd внутри исходного сообщения. – Paultheawesome13

0

Это имеет большой смысл. Спасибо, Марк!

Принимая во внимание, что говорит, я бы получил подсистему Windows для Linux (бета-версия). Есть инструкции here. Затем запустите свой скрипт.

Смежные вопросы