Şimdi aşağıda verilen bir komutla karşılaştım -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Ne tahmin edebilirsiniz, muhtemelen .bash_profile değişiklikleri taahhüt etmek için kullanılır ama tam olarak ne için kullanılır?
Şimdi aşağıda verilen bir komutla karşılaştım -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Ne tahmin edebilirsiniz, muhtemelen .bash_profile değişiklikleri taahhüt etmek için kullanılır ama tam olarak ne için kullanılır?
Yanıtlar:
Programın stdout'unu önceden yönlendirir ve >>
sonra verilen dosyaya ekler.
>> file command
echo a b >> c d
eklenir . a b d
c
>>
?İle >>
, bir komutun çıktısını bir dosyaya eklersiniz.
Örnek komutunuz temel olarak birkaç bölümden oluşur:
komut >> dosyaadı
Böylece çıktı command
eklenir filename
.
echo
?Özel durumunuzda, echo "…"
komut girdi argümanlarını “standart çıktı tanımlayıcısı” olarak adlandırılan “stdout” a gönderir. Girilecek bağımsız değişkenleri echo
bir satırsonu ( \n
) izler , böylece satır sonu elde edersiniz.
Burada, bir "standart çıktı tanımlayıcı", bir komutu yürüttüğünüzde kabuğunuzda gösterilen bir çıktı akışından başka bir şey değildir. (Yani echo foo
Enter yazdığınızda ve Enter tuşuna bastığınızda foo\n
, echo
komut satırının gerçek çıkışıdır ve foo
kablonuz tarafından bir satırsonu olarak gösterilir .)
Temelde komut satırınıza yazan her şey stdout kullanıyor. "Stderr" adında, genellikle hata iletileri için kullanılan başka bir tanımlayıcı da vardır. Ayrıca stdout gibi basılacaktır, bu yüzden bazen serpiştirilebilirler. Ve girdi için kullanılan bir stdin tanımlayıcısı var. Daha fazla bilgi için bu makaleye bakın .
Stdout'u her zaman aşağıdaki operatörlerden biriyle yapabileceğiniz bir dosya tanımlayıcısına yeniden yönlendirebilirsiniz :
>
bir dosya tanıtıcısına yönlendirir. Dosyayı yoksa oluşturur veya zaten varsa dosyayı yazmadan önce keser. Bu nedenle dosyanın üzerine stdout yazılır.
>>
bir dosya tanımlayıcıya eklenir. Dosyayı yoksa oluşturur.
Stderr'i benzer bir şekilde 2>
veya kullanarak da yönlendirebilirsiniz 2>>
. Veya stderr ve stdout'u tek bir dosyada birleştirebilirsiniz: 2>&1
bunu yapar. Yeniden yönlendirme hakkında daha fazla bilgi ve bazı örnekler için bu küçük eğiticiyi okuyabilirsiniz .
Genel olarak, size belirli bir kabuk komutu hakkında görsel rehberlik ve bilgi veren explainshell.com'u denemek isteyebilirsiniz .
İçin TLDR sadece bir örnek görmek ister insanlar;
>> 'dan önceki komutun standart çıktısı (hatalar değil), isminden sonra gelen dosyanın sonuna eklenir.
Yani "flintstones.txt" dosyası içeriyorsa;
Fred
Barney
echo Dino >> flintstones.txt
dosyanın sonuna 'Dino' eklenmesi ile sonuçlanır;
Fred
Barney
Dino
echo Dino > flintstones.txt
İçeriğinin basit Dino
bir tek okla yapılması durumunda olacağını göstermek için bir örnek eklemenizi tavsiye ederim .
Yine, eğer yaparsan
> somefile.txt
Dosyanın tüm içeriği silinecek.
> file
dosyayı temizler ancak >> file
hiçbir şey yapmaz.
man bash
oldukça resmi bir dille yazılmıştır, anlaşılması zor olabilir. Öte yandan, kelime grububash >>
Google'da birkaç yararlı bağlantı döndürür. Google'a dayanmadan bilgiyi toplamak istediğimiz doğrudur; bu nedenle kolayca aranabilir cevabı olan bir soru bile sığabilir. Ancak, yanıtı hemen vermediyseniz (bkz. Kendi sorumu cevaplayabilir miyim? ) Veya mevcut kaynakları (muhtemelen anlamanız için yardıma ihtiyaç duyacağınızı) göstermeniz araştırma eksikliğini gösterir.