Назад | Перейти на главную страницу

Каково точное значение «exec &> / var / log / a.log» в сценарии оболочки?

Я думаю, что это своего рода перенаправление io, но оно отличается от примеров из руководства. Обычно мы можем перенаправить стандартный вывод скрипта с помощью следующей строки:

exec 1> /var/log/a.log

Но я видел эту строку в одном из скриптов:

exec &> /var/log/a.log

Что здесь означает "&"? Это одновременно стандартный вывод и стандартный поток?

Спасибо, Джеймс

Ваше предположение верно.

  • exec >filename перенаправления команд stdout в указанный файл. Это отправляет весь вывод команды, который обычно идет в stdout в этот файл.
  • command &> filename перенаправляет как stdout и stderr команды в имя файла.

Фактически, command &>file это другая форма command > file 2>&1 (недоступно в Bourne Shell до окончательной версии 4 или в стандартной оболочке Debian Almquist, используемой в Debian / Ubuntu):

Что это & характер делать? Очень хорошо объяснено Вот:

В оболочках, производных от csh (оболочка C), синтаксис вместо этого добавляет & (амперсанд) к символам перенаправления, что дает аналогичный результат. Причина в том, чтобы различать файл с именем '1' и stdout, т.е. cat file 2>1 против cat file 2>&1. В первом случае stderr перенаправляется в файл с именем '1', а во втором - stderr перенаправляется в stdout.

Подробнее о перенаправлении ввода-вывода читайте здесь:

http://www.tldp.org/LDP/abs/html/io-redirection.html

http://www.tldp.org/LDP/intro-linux/html/sect_05_02.html#sect_05_02_01