Как вы помните синтаксис для перенаправления 2> & 1 [закрыто]


12

У вас есть мнемоника или система? Это беспокоило меня годами, я всегда должен искать это

Ответы:


19

Если вы программист на C, вы можете думать &1как «адрес 1», поэтому 2>&1читается как «перенаправить дескриптор файла # 2 в то же место, что и # 1».


Не знаю, поможет ли это ... Мнемоника - довольно личное дело.
— lgeorget

+12 Это также правильное описание того, что происходит.
— Стефан Шазелас

1
Интересно, так ли это было («адрес 1»), когда это было изобретено. Поскольку некоторые люди внесли большой вклад в язык C и UNIX, когда они были изобретены, это возможно
— lgeorget

1
Я мог бы начать использовать вместо этого;)
— Златовласка

3

«Два к одному» («к» бытию >) имеет для меня более логичный смысл, чем «Два к одному», с чем я обычно путаю это. Если вы рассматриваете «и один» как одно существительное (место), это также имеет грамматический смысл в контексте, который сложнее сделать с «Два и к одному» - вам придется учитывать «к одному» один существительное, и оно все равно не имело бы контекстуального смысла.


2
Я не понимаю
— Мэтт

2

Не мнемоника, но я читаю это следующим образом:

0это стандартный 1это стандартный вывод 2это stderr. >в. <вне. &это дескриптор файла (в некоторых оболочках).

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. 

2

Когда вы пишете 2>&1, вы говорите «стандартная ошибка идет в стандартный вывод».

Давайте разберемся с этим.

Сначала вы хотите запомнить, что стандартная ошибка 2и стандартный вывод 1.

Итак, у вас есть 2что-то что-то 1.

"идет" написано >.

Итак, у вас есть 2>что-то 1.

2>filenameозначает отправить стандартную ошибку в filename. Но вы не хотите отправлять его в файл с именем 1. Вы хотите что-то еще: номер файла, который уже открыт. Вот для чего &.

Так 2>&1.

Вы также можете думать об этом, как будто вы выполняете задание, где « >равно» равно, а « &как» $, сравните:

f=$1
2>&1

Чтобы понять командную строку с несколькими перенаправлениями, важно знать, что перенаправления выполняются слева направо. См. Порядок перенаправлений для более подробной информации об этом.


0

Я вспомнил, что это всегда 2 -> 1. Stderr на стандартный вывод.

Средняя часть всегда тяжелая, и я всегда все испортил, пока не вспомнил, что сначала появляется острый персонаж >, а затем персонаж, которого я не могу написать в реальной жизни &.

Так никогда 2&>1, всегда2>&1


0

Если вы понимаете, что FD2 - это STDERR, вы можете подумать: «О, и захватывать STDERR, куда бы я ни отправлял STDOUT (FD1)».


0

Мои коллеги и я обычно говорю «два больше , чем один», потому что большинство из нас не всегда помнить , что stderrдескриптор файла 2и stdoutявляется 1(особенно новички в Unix / Linux), так что другие мнемоники о перенаправлении stderrдействительно не работают , Единственная проблема в том, что вы все равно должны помнить, куда идет амперсанд!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.