Я думаю, что это своего рода перенаправление 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