LINUX.ORG.RU

Символ в коде bash

 


0

1

Часто вижу в коде символ &2, но не пойму зачем он нужен. С ним и без него одинаково получается. Дайте ссылку почитать что это такое))

Пример.


echo "Invalid entry." >&2



Последнее исправление: gedat (всего исправлений: 3)

Перенаправление в stderr

bugfixer ★★★★★
()
# stdout будет перенаправлен в файл, а stderr в консоль
./script.sh > output.txt

# такое используют чтобы прЕрвать выполнение скрипта с ошибкой
echo "Error message!" >&2
exit 1


# сохраняем сообщения об ошибке в файл
./script.sh 2> error.log
tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от tz4678

Спасибо, я что-то забыл совсем про это))

Только вот вопрос, где это может пригодиться?

В любом случаи

echo "Error message!"
exit 1

Сделает почти тоже самое, в консоли будет выведен текст, и по нему можно будет понять где ошибка. В данном контексте разница только в том что ошибки будут записываться в файл?

gedat
() автор топика
Последнее исправление: gedat (всего исправлений: 1)
Ответ на: комментарий от gedat

после exit дальнейший код выполняться не будет, а вывод разделяют на два потока, чтобы из логов исключить ворнинги и ошибки. например у тебя есть утилита выхдлп которой - это опр формат, сообщения же об ошибках в неподходящем месте сделают документ невалидным

tz4678 ★★
()
Ответ на: комментарий от gedat

где это может пригодиться?

Когда скрипт выполняет по заданию crond, не всегда удобно когда длинные портянки с ошибками попадают в STDOUT.

foxy_ant ★★
()
Ответ на: комментарий от gedat

Конечно ничто не останавливает тебе их мешать или не использовать вовсе.

Но так сложилось в *nix, что программе доступно два потока, в одном она пишет результат работы, а в другой ошибки. И это действительно удобно. Если вывод программы не текстовый, то stdout можно отправить в файл, а stderr оставить в консоли. Более того stderr небуферизирован – писать туда можно всегда, текст будет выведен в поток, даже если программа на пол-пути завершилась, не сделав flush.

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