Intereting Posts
crc8 undefined при компиляции модуля ядра Linux на Beaglebone black / Debian Подключить с помощью sshfs и записать разрешения на файл Как я могу предотвратить меньше освобождения экрана при выходе? awk: 0602-562 Поле $ () неверно. в сценарии ksh на AIX sed для замены любой записи в файле конфигурации Как отобразить управляющие символы (^ C, ^ D, ^ [, …) по-разному в оболочке Как настроить параметры Unix для 360 Spatial Workstation (в частности, аудио-плагины vst и aax), чтобы заставить его работать как не-администратор? Найдите строку с двумя последними символами в виде числовых CentOS VM загружается в пустой экран Лучший способ освободить место на диске от удаленных файлов, которые открыты Проблема с поиском и grep системный объем изменяется, когда объем vlc увеличивается на 100% cd к самому недавно созданному каталогу Bash Script: нет такого файла или каталога при определении переменной через источник vars.txt найти файлы с двумя типами расширений, измененными более 30 дней назад

Различия в перенаправлении между &>> & и 2> & 1

В этом потоке SO и нескольких других потоках я видел следующие команды для перенаправления stdout и stderr в файл.

Все ли они эквивалентны? Есть ли разница между ними?

 command1 >> logfile 2>&1 command &> logfile command >& logfile 

Поскольку вы отметили zsh , позвольте мне сказать вам, что все три перенаправления работают точно так же. Поскольку вы, возможно, читали как дублирующиеся сообщения (те, что указаны в комментарии, и один в своем сообщении), все они перенаправляют stderr на stdout который inturn перенаправляется в файл «logfile» (то есть, файл журнала будет содержать оба вывода и ошибки).

Но их поведение меняет LOT в зависимости от оболочки, в которой вы находитесь.

Все три стиля перенаправления хорошо работают одинаково в bash и zsh

Но:

Только >& работает в csh или tcsh

 [soum@server ~]$ ./test.sh > logfile 2>&1 Ambiguous output redirect. [soum@server ~]$ ./test.sh &> logfile Invalid null command. [soum@server ~]$ ./test.sh >& logfile [soum@server ~]$ echo $SHELL /bin/tcsh [soum@server ~]$ 

В ksh только 2>&1 .

 $ ./test.sh >& logfile -ksh: logfile: bad file unit number $ ./test.sh &> logfile [1] 23039 $ 1 2 3 4 5 6 logfile test.sh ls: cannot access ttr: No such file or directory [1] + Done(2) ./test.sh &> logfile 

Я ненавижу ksh . В то время как >& только что дал ошибку, &> запустила часть команды и очистила файл журнала (если не пустая).