LINUX.ORG.RU

Команды shell


0

0

Дурной вопрос, конечно, но что значат часто встречающиеся конструкции:
"somescript.sh >/dev/null 2>&1"
и
"somescript.sh 2>/dev/null"

Ясное дело, что перенаправляется вывод скрипта.
Но, что значат "2>&1" и "2>/dev/null" ?

anonymous

"2>/dev/null" значит перенаправление потока stderr в /dev/null "2>&1" значит перенаправление потока stderr в поток с дескриптором 1 т.е. в stdout

anonymous
()

первый вариант служит для перенаправления стандартного вывода (stdout) и вывода ошибок (stderr) на /dev/null. т.е. "в никуда". Используется если вы хотите игнорировать весь возможный вывод (обычно наиболее используемые консольные программы другие дескрипторы для вывода не используют). Допустим у Вас в bash сценарии стоит cp или rm сообщения об обиках от которых Вас не интересуют. Интересует только их результат их выполнения. Или код возврата. (Если Вам нужно знать встречается ли в файле какой-то образец пишете: grep -iw слово файл > /dev/null 2>&1, хотя ключи, конечно, я взял первые попавшиеся, и затем if [ $?... и так далее). Значок ">" без указания номера дескриптора эквивалентен "1>", т.е. stdout. "2>", соответственно, stderr. Это значит, что 2>&1 означает "перенаправить stderr в stdout". А stdout уже перенаправлен на нулевое устройство, которое принимает любой ввод и молча его отбрасывает (При чтении из него, оно, как Вам очевидно известно, возвращает "конец файла"). Прошу прощения за столь длинное изложение элементарных вещей. Советую загрузить с http://www.oreilly.com/openbooks 2-ое издание "Advanced bash scripting". Там это все хорошо изложено.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.