Что означает>&?
меня немного смутило это выражение:
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позволяет&>>и>>&"формы".