Yanıtlar:
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 .
"İ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.
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.
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.
FD2'nin STDERR olduğunu anlarsanız, "Oh, ve STDOUT (FD1) gönderdiğim her yerde STDERR'ı yakalayın" diye düşünebilirsiniz.
Ç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!