2

Какова цель & as в &> и &>> в bash?

2 ответа2

3

Они оба связаны с перенаправлением ввода / вывода, как описано здесь.

В случае &> это перенаправляет стандартный вывод (stdout) и стандартный вывод ошибок (stderr) в файл. Например, давайте перенаправим вывод даты в файл следующим образом:

date &> foo.txt

Это создаст или перезапишет файл с именем foo.txt с выводом date . И содержимое этого файла будет примерно таким:

Sun Oct  4 22:37:58 EDT 2015

Но в случае &>> это перенаправляет стандартный вывод (stdout) и стандартный вывод ошибок (stderr) в файл. Но >> указывает, что указанный файл должен быть добавлен, а не перезаписан, если он уже существует.

Так что, если я запускаю эту команду несколько раз подряд:

date &> foo.txt

Все, что когда-либо было бы в foo.txt , - это результат последнего запуска этой команды, поскольку одиночный символ > указывает, что содержимое файла будет перезаписываться при каждом запуске команды.

Но если я запускаю эту команду с >> несколько раз подряд:

date &>> foo.txt

К файлу foo.txt будет добавлен вывод date следующим образом:

Sun Oct  4 22:37:58 EDT 2015
Sun Oct  4 22:38:06 EDT 2015
Sun Oct  4 22:38:13 EDT 2015
Sun Oct  4 22:38:15 EDT 2015
Sun Oct  4 22:38:16 EDT 2015

Просто отметьте, что &>> не работает в Bash 3.x, но работает как ожидается в Bash 4.x.

0

Рассмотрим команду с именем cmd:

cmd &>filename

Вышесказанное отправляет как стандартную команду, так и ее стандартную ошибку в filename , перезаписывая все, что было ранее в этом файле. Это эквивалентно:

cmd >filename 2>&1

Форма &>> очень похожа:

cmd &>>filename

Это добавляет stdout и stderr cmd к тому, что уже было в filename . Это эквивалентно:

cmd >>filename 2>&1

Вы можете прочитать больше об этом в man bash .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .