понять последовательность перенаправлений

8

Если несколько перенаправлений используются вместе, имеет ли значение изменение их порядка?

Как понять смысл их порядка? Цепной канал перенаправлений создается как чтение перенаправлений слева направо или справа налево?

Например

command 2>&1 > somefile

command > somefile 2>&1

Спасибо и всего наилучшего!

Тим
источник

Ответы:

7

Да, порядок имеет значение, и их следует читать слева направо.

command 2>&1 >somefileозначает перенаправить stderr (2) на текущий пункт назначения stdout (терминал). Затем измените стандартный вывод, чтобы перейти к somefile. Таким образом, stderr идет в терминал, а stdout идет в файл.

command >somefile 2>&1означает перенаправить стандартный вывод в somefile, а затем перенаправить стандартный вывод в тот же пункт назначения, что и стандартный вывод (файл). Так что и stderr, и stdout идут в somefile.

Это объясняется в разделе 3.6 руководства Bash: перенаправления .

CJM
источник
1
man bash 

говорит:

НАПРАВЛЕНИЕ Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальных обозначений, интерпретируемых оболочкой. Перенаправление может также использоваться для открытия и закрытия файлов для текущей среды выполнения оболочки. Следующие операторы перенаправления могут предшествовать или появляться в любом месте простой команды или могут следовать за командой. Перенаправления обрабатываются в порядке их появления слева направо.

а также

Обратите внимание, что порядок перенаправлений является значительным. Например, команда

ls > dirlist 2>&1

направляет как стандартный вывод, так и стандартную ошибку в файл dirlist, а команда

ls 2>&1 > dirlist

направляет только стандартный вывод в файл dirlist, потому что стандартная ошибка была продублирована из стандартного вывода до того, как стандартный вывод был перенаправлен в dirlist.

Пользователь неизвестен
источник