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

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

exec 1> /var/log/a.log

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

exec &> /var/log/a.log

Что здесь означает '&'? Это и stdout, и stderr?

Спасибо, log »в сценарии оболочки? Я думаю, что это своего рода перенаправление io, но оно отличается от примеров из руководства. Обычно мы можем перенаправить stdout скрипта следующей строкой: exec 1> /var/log/a.log Но я видел ...

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

exec 1> /var/log/a.log

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

exec &> /var/log/a.log

Что здесь означает '&'? Это и stdout, и stderr?

Спасибо, log »в сценарии оболочки? Я думаю, что это своего рода перенаправление io, но оно отличается от примеров из руководства. Обычно мы можем перенаправить stdout скрипта следующей строкой: exec 1> /var/log/a.log Но я видел ...

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

exec 1> /var/log/a.log

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

exec &> /var/log/a.log

Что здесь означает '&'? Это и stdout, и stderr?

Спасибо, мы можем перенаправить стандартный вывод сценария с помощью следующей строки:

exec 1> /var/log/a.log

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

exec &> /var/log/a.log

Что здесь означает '&'? Это и stdout, и stderr?

Спасибо, мы можем перенаправить стандартный вывод сценария с помощью следующей строки:

exec 1> /var/log/a.log

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

exec &> /var/log/a.log

Что здесь означает '&'? Это и stdout, и stderr?

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

0
задан 25 November 2015 в 21:58
1 ответ

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

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

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

Что делает символы и ? Очень хорошо объяснено здесь :

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

4
ответ дан 4 December 2019 в 11:46

Теги

Похожие вопросы