У вас есть мнемоника или система? Это беспокоит меня уже много лет, мне всегда приходится искать
решение1
Если вы программист на языке C, вы можете думать об &1
«адресе 1», то 2>&1
есть «перенаправить файловый дескриптор №2 в то же место, что и №1».
решение2
«Два к одному»("to" being >
) имеет для меня больше логического смысла, чем "Two and to one", с которым я обычно путаю его. Если вы рассматриваете "and one" как одно существительное (место), это также имеет грамматический смысл в контексте, что сложнее сделать с "Two and to one" — вам пришлось бы рассматривать "to one" как одно существительное, и это все равно не имело бы контекстного смысла.
решение3
Это не мнемоника, но я читаю ее так:
0
это stdin.
1
это stdout.
2
это stderr.
>
это into.
<
это out of.
&
это файловый дескриптор (в некоторых оболочках).
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
Все может измениться, если вы изменили какой-либо из файловых дескрипторов до перенаправления...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
решение4
Я вспомнил, что это всегда 2 -> 1. Stderr в stdout.
Средняя часть всегда самая сложная, и я всегда ее путал, пока не вспомнил, что сначала идет острый персонаж >
, а затем персонаж, которого я не могу написать в реальной жизни &
.
Так что никогда 2&>1
, всегда2>&1