Terminal komutunda `>>` ne anlama geliyor?


14

Ş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?


26
Gelecekte neyi geliştireceğinizi bilmeniz için: man basholdukça resmi bir dille yazılmıştır, anlaşılması zor olabilir. Öte yandan, kelime grubu bash >>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.
Kamil Maciorowski

5
Komut satırı yeniden yönlendirme işleçleri hakkında ayrıntılı bilgi için bkz. Unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Yanıtlar:


31

Programın stdout'unu önceden yönlendirir ve >>sonra verilen dosyaya ekler.


28
"önceki program" Bu ne anlama geliyor? Açıkça komut verin, ancak yönlendirmeler de önceden yazılabilir, yani>> file command
rexkogitans

Bir örnek. Ubuntu 18.04'te "apt search rust >> x" "apt search rust" kısmı, pas terimi için kullanılabilir paketleri arar ve bunu standart olarak gönderir (normalde bu durumda terminal). Ancak ">> x" çıktıyı "x" dosyasının sonuna yönlendirdiğini söyler. Sadece dosyayı değiştirmek isteseydim, sadece tek bir ">" gerekir.
NomadMaker

@rexkogitans Kodunuzu okumak için kafa karıştırıcı yapmak istiyorsanız komutun ortasında bile. adlı bir dosyaya echo a b >> c deklenir . a b dc
kasperd

@kasperd Ayrıca stdin yönlendirmesini herhangi bir sırada dağıtabilirsiniz.
rexkogitans

48

Kısa cevap - ne yapar >>?

İle >>, bir komutun çıktısını bir dosyaya eklersiniz.

Örnek komutunuz temel olarak birkaç bölümden oluşur:

komut >> dosyaadı

Böylece çıktı commandeklenir filename.


Belirli bir durumda ne olur 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 echobir 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 fooEnter yazdığınızda ve Enter tuşuna bastığınızda foo\n, echokomut satırının gerçek çıkışıdır ve fookablonuz 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 .

Kabuktaki çıktıyı nasıl yönlendirirsiniz?

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>&1bunu yapar. Yeniden yönlendirme hakkında daha fazla bilgi ve bazı örnekler için bu küçük eğiticiyi okuyabilirsiniz .

Belirli bir kabuk kodunun ne anlama geldiğini nasıl anlayabilirim?

Genel olarak, size belirli bir kabuk komutu hakkında görsel rehberlik ve bilgi veren explainshell.com'u denemek isteyebilirsiniz .


7

İç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 Dinobir tek okla yapılması durumunda olacağını göstermek için bir örnek eklemenizi tavsiye ederim .
JakeGould

-2

Yine, eğer yaparsan

> somefile.txt

Dosyanın tüm içeriği silinecek.


Neden başka bir cevap kopyalıyorsunuz?
Toto

@Toto yaptığını sanmıyorum. Eklemsel ve çok değerli görünüyor.
Volker Siegel

@Toto Hata! Daha yakından bakarsak, aslında durum böyle değil. Birçok yönden bile yanlış. Tuhaf - burada yeni, ama başka bir yerde aktif - bu yüzden muhtemelen sadece trolling değil.
Volker Siegel

2
@VolkerSiegel: > filedosyayı temizler ancak >> filehiçbir şey yapmaz.
Toto

ancak bu soruya hiçbir şekilde cevap vermiyor ve bir yorum olmalı
phuclv
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.