Что означает>&?
меня немного смутило это выражение:
gcc -c -g program.c >& compiler.txt
Я знаю &>filename
будет перенаправить stdout и stderr в файл filename
. Но в этом случае амперсанд находится после знака больше, чем. Это похоже на его форму M>&N
, где M
и N
несколько файловых дескрипторов.
в приведенном выше фрагменте, делает M=1
и N='compiler.txt'
? Как именно это отличается от:
gcc -c -g program.c > compiler.txt (ampersand removed)
Я понимаю, что каждый открытый файл связан с дескриптором файла больше 2. Это правильно?
если да, то является ли имя файла взаимозаменяемым с его файловым дескриптором в качестве цели перенаправления?
2 ответа:
это то же самое, что
&>
. С главной страницы bash:перенаправление стандартного вывода и стандартной ошибки Эта конструкция позволяет как стандартный вывод (дескриптор 1) и вывод стандартной ошибки (файловый дескриптор 2) для перенаправления на файл, имя которого является расширением word.
There are two formats for redirecting standard output and standard error: &>word and >&word Of the two forms, the first is preferred. This is semantically equiva- lent to >word 2>&1
&>
vs>&
: предпочтительная версия&>
(clobber)о:
&>
>&
оба будут clobber файл-усечь его файл до 0 байт перед записью в него, так же, как
> file
будет делать только в случае STDIN.на
bash
раздел перенаправления вручную добавляет, что:из двух форм, первый является предпочтительным. Это семантически эквивалентно
>word 2>&1
при использовании второй формы, слово не может расширяться до числа или
-
. Если это так, применяются другие операторы перенаправления (см. дублирование файловых дескрипторов ниже) по соображениям совместимости.(Примечание: in
zsh
оба эквивалентны.)это очень хорошая практика, чтобы получить память палец в первом (
&>
) форма, потому что:использовать
&>>
как>>&
не подавляетсяbash
(добавление)есть только одна форма добавления:
формат для добавления стандартного вывода и стандартной ошибки:
&>>word
это семантически эквивалентно
>>word 2>&1
(см. дублирование файловых дескрипторов ниже).
Примечание:
- использование clobber
&>
over>&
в раздел выше снова рекомендуется, учитывая, что есть только один способ добавления вbash
.zsh
позволяет&>>
и>>&
"формы".