Что значит и что?
Я был немного смущен этим выражением:
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. Это правильно?
Если это так, является ли имя файла взаимозаменяемым с файловым дескриптором в качестве объекта перенаправления?
Ответы
Ответ 1
Это то же самое, что и &>
. Из bash manpage:
Перенаправление стандартного вывода и стандартная ошибка Эта конструкция допускает как стандартный вывод (дескриптор файла 1), так и стандартный вывод ошибки (дескриптор файла 2) для перенаправления на файл, имя которого является расширением слова.
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