Jak pamiętasz składnię przekierowania 2> i 1 [zamknięte]


12

Czy masz mnemonik lub system? Martwiło mnie to od lat. Zawsze muszę to sprawdzić

Odpowiedzi:


19

Jeśli jesteś programistą C, możesz myśleć o tym &1jak o „adresie 1”, więc 2>&1czyta „deskryptor pliku przekierowującego # 2 w to samo miejsce co # 1”.


Nie wiem, czy to pomaga ... Mnemoniki to bardzo osobista sprawa.
— lgeorget

+12 To także poprawny opis tego, co się dzieje.
— Stéphane Chazelas,

1
Zastanawiam się, czy tak to się myślało („adres 1”), kiedy zostało wymyślone. Ponieważ niektórzy ludzie wnieśli duży wkład zarówno w język C, jak i UNIX, kiedy zostali wymyśleni, jest to możliwe
— lgeorget,

1
Mógłbym zamiast tego zacząć używać;)
— goldilocks

3

„Dwa do jednego” („do” bytu >) ma dla mnie bardziej logiczny sens niż „Dwa do jednego”, z czym to zwykle mylę. Jeśli weźmiesz pod uwagę „i jeden” jako pojedynczy rzeczownik (miejsce), ma to również sens gramatyczny w kontekście, co jest trudniejsze w przypadku „Dwóch i jednego” - należałoby rozważyć „jednego” jednego rzeczownik i nadal nie miałoby to sensu kontekstowego.


2
Nie rozumiem
— Matt

2

Nie jest to mnemonik, ale czytam to w następujący sposób:

0jest standardowe. 1jest standardowe. 2jest stderr. >interesuje się. <jest z. &jest deskryptorem pliku (w niektórych powłokach).

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

Może się to zmienić, jeśli pomieszałeś z dowolnym deskryptorem pliku przed przekierowaniem ...

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

Kiedy piszesz 2>&1, mówisz „standardowy błąd przechodzi na standardowe wyjście”.

Rozwalmy to.

Najpierw chcesz zapamiętać błąd 2standardowy i standardowe wyjście 1.

Więc masz 2coś 1.

„idzie do” jest napisane >.

Więc masz 2>coś 1.

2>filenameoznacza wysłanie standardowego błędu do filename. Ale nie chcesz wysyłać go do pliku o nazwie 1. Chcesz czegoś innego: numeru już otwartego pliku. Po to &jest.

Tak 2>&1.

Możesz również pomyśleć o tym, jakbyś wykonywał zadanie, w którym to >jest równe, a to &jest jak $, porównaj:

f=$1
2>&1

Aby zrozumieć wiersz poleceń z wieloma przekierowaniami, ważne jest, aby wiedzieć, że przekierowania są wykonywane od lewej do prawej. Aby uzyskać więcej informacji na ten temat, zobacz Kolejność przekierowań .


0

Pamiętałem, że zawsze jest 2 -> 1. Stderr na stdout.

Środkowa część jest zawsze trudna i zawsze ją pomieszałem, dopóki nie przypomniałem sobie, że najpierw pojawia się ostra postać >, a potem postać, której nie mogę napisać w prawdziwym życiu &.

Więc nigdy 2&>1, zawsze2>&1


0

Jeśli zrozumiesz, że FD2 to STDERR, możesz pomyśleć: „Och, i przechwyć STDERR tam, gdzie wysyłam STDOUT (FD1)”.


0

Razem z moimi współpracownikami zwykle mówimy „dwa są większe niż jeden”, ponieważ większość z nas nie zawsze pamięta, że stderrjest to deskryptor pliku 2i stdoutjest 1(szczególnie nowi w Uniksie / Linuksie), więc inne mnemoniki dotyczące przekierowań stderrtak naprawdę nie działają . Jedynym problemem jest to, że wciąż musisz pamiętać, dokąd zmierza ampersand!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.