2> & 1 yönlendirme sözdizimini nasıl hatırlıyorsunuz [kapalı]


12

Anımsatıcı veya sisteminiz var mı? Bu beni yıllarca rahatsız etti, her zaman aramak zorundayım

Yanıtlar:


19

Bir C programcısıysanız, &1"1 adresi" olarak 2>&1okur "dosya tanımlayıcı # 2'yi # 1 ile aynı yere yeniden yönlendir " olarak düşünebilirsiniz .


Yardımcı olup olmadığını bilmiyorum ... Anımsatıcılar oldukça kişisel bir şeydir.
lgeorget

+12 Bu da olanların doğru bir tanımı.
Stéphane Chazelas

1
Mucize icat edildiğinde ("1 adresi") nasıl düşünülmüş olup olmadığını merak ediyorum. Bazı insanlar icat edildiğinde hem C diline hem de UNIX'e büyük katkıda bulunduğundan, bu mümkündür
lgeorget

1
Bunun yerine kullanmaya başlayabilirim;)
goldilocks

3

"İki ve bir" ("ila" varlık >) benim için "İki ve bir" den daha mantıklı bir anlam ifade eder, ki bu genellikle onunla karıştırdığım şeydir. "Ve bir" kelimesini tek bir isim (yer) olarak görürseniz, bağlamda dilbilgisel olarak da anlam ifade eder, bu da "İki ve bire" ile ilgisi daha zordur - tek bir kelimeyi "bir" olarak düşünmeniz gerekir isim ve hala bağlamsal anlam ifade etmiyordu.


2
Anlamıyorum
Matt

2

Bir anımsatıcı değil, ama şöyle okudum:

0stdin. 1stdout. 2stderr. >içine. <dışında. &dosya tanıtıcısıdır (bazı kabuklarda).

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

redirect stderr into stdout

Yeniden yönlendirmeden önce dosya tanımlayıcılarından herhangi birini bozduysanız değişebilir ...

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

Yazarken 2>&1, "standart hata standart çıktıya gider" diyorsunuz.

Bunu parçalayalım.

Öncelikle standart hatanın 2ve standart çıktının ezberlemek istediğinizi unutmayın 1.

Yani 2bir şeyin var 1.

"gider" yazılır >.

Yani bir 2>şeyin var 1.

2>filenamestandart hata gönderme anlamına gelir filename. Ancak bunu adlı bir dosyaya göndermek istemezsiniz 1. Başka bir şey istiyorsunuz: zaten açık olan dosya sayısı. Bunun &için.

Yani 2>&1.

Nerede bir ödev yaptıklarını gibi Ayrıca düşünebiliriz >bir eşittir gibidir ve &bir gibidir $, karşılaştırmak:

f=$1
2>&1

Birden çok yönlendirmeli komut satırını anlamak için bilmeniz gereken önemli şey, yönlendirmelerin soldan sağa doğru yapılmasıdır. Bkz yönlendirmeler sırasını bu konuda daha fazla ayrıntı için.


0

Ben her zaman 2 -> 1. Stderr stdout olduğunu hatırladım.

Orta kısım her zaman zor olanıdır ve her zaman berbat ettim, önce keskin karakter >, sonra gerçek hayatta yazamadığım karakter olduğunu hatırlayana kadar &.

Yani asla 2&>1, her zaman2>&1


0

FD2'nin STDERR olduğunu anlarsanız, "Oh, ve STDOUT (FD1) gönderdiğim her yerde STDERR'ı yakalayın" diye düşünebilirsiniz.


0

Çoğumuz her zaman hatırlamıyorum çünkü benim arkadaşları ve genellikle, "iki birden büyüktür" demek stderrdosya belirleyicisidir 2ve stdoutbir 1yeniden yönlendirme hakkında diğer anımsatıcılarını böylece, (unix / linux için özellikle yeni) stderrgerçekten işe yok . Tek sorun, hala ve işareti nereye gittiğini hatırlamak zorunda!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.