Какова цель & as в &>
и &>>
в bash?
2 ответа
Они оба связаны с перенаправлением ввода / вывода, как описано здесь.
В случае &>
это перенаправляет стандартный вывод (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.
Рассмотрим команду с именем cmd
:
cmd &>filename
Вышесказанное отправляет как стандартную команду, так и ее стандартную ошибку в filename
, перезаписывая все, что было ранее в этом файле. Это эквивалентно:
cmd >filename 2>&1
Форма &>>
очень похожа:
cmd &>>filename
Это добавляет stdout и stderr cmd к тому, что уже было в filename
. Это эквивалентно:
cmd >>filename 2>&1
Вы можете прочитать больше об этом в man bash
.