Какова цель & 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 .
