Terminal Cuma: Standart Akış

Başka bir Cuma gününe hoş geldiniz ...

Terminalin küçük bir bölümünü tanımanın zamanı geldi. Çok düşündükten sonra, standart akışlar; Yüzeysel olsa da herkesin bilmesi gereken bir şey olduğunu düşünüyorum.

Standart Akış

Standart Akış Kullanıcı ile terminal arasındaki birkaç iletişim kanalından oluşur. Bu Giriş / Çıkış "kanalları", bir komut yürütüldüğünde bilgileri görüntüler veya yakalar.

Standart akışlar hakkında hızlı şema.

Standart akışlar hakkında hızlı şema.

3 I / O bağlantısı şunlardır: stdin Standart giriş, stdout'u Standart çıktı, Stderr Standart hata.

stdin: Standart giriş

Standart girdi, borular, yeniden yönlendirme, klavye vb. Aracılığıyla bir komuttan bilgi alma yöntemimizdir. Bunu dosya tanımlayıcısı 0 ile tanımlıyoruz.

Tanımlayıcı, bu durumda giriş ve çıkış kanallarına erişim için bir göstergedir. Bunlar int değerleridir, genellikle 0, 1 ve 2.

Bir stdin örneği şöyle olacaktır:

sırala <listeleme

Listedeki tüm bilgileri alır - bu durumda rastgele yazılan sayıları - ve dosyayı ls komutuna yönlendirirken sayısal listeyi alfabetik olarak sıralar. Bu örnekte bayraklar örtüktür.

stdout: Standart çıktı

Standart çıktı, adından da anlaşılacağı gibi, konsol aracılığıyla bir komutun çıktısını görüntüler. Ls yazarsak, ekranda bize gösterdiği tüm bilgiler standart çıktıdır. Tanımlayıcı 1 ile temsil edilir.

Şimdi sadece bash hahaha'yı sevdiğim için bash ile yazılmış bir senaryo ile stdin ve stdout'u somutlaştırmaya çalışacağım. 🙂

test.sh

#! / bin / bash eğer [-t 0]; then echo "Standart çıktı kullanıyorsunuz" elif [-t 1]; then echo "stdin kullanıyorsunuz" else echo "Acımasız hata" fi

Şimdi komut dosyasının nasıl kullanılacağını gösteren bir ekran görüntüsü. Komut dosyasıyla bir boruyu yeniden yönlendirirken veya kullanırken -t testi sadece stdout betiğinin çalıştırılıp çalıştırılmadığını ve değilse açıkça stdin olduğunu bilmek.

bash test.sh ls | bash testi.sh bash testi.sh </ etc / passwd
Söz konusu betik ve çıktıları ...

Söz konusu betik ve çıktıları ...

Öğrenmek için komutu değiştirmeyi ve alıştırma yapmayı unutmayın.

stderr: Standart hata

Standart Hata, programların hataları veya teşhisi gösterme şeklidir. Tanımlayıcı 2 ile temsil edilir.

Kavramı anlamak için durum budur: bir komuttan bir hatayı kaydetmek istediğimizde, ilk düşündüğümüz şey çıktıyı düz metne yönlendirmektir.

ls> info.txt

Bu işe yarar, komut bilgileri düz metin dosyasında saklanır. Fakat hata kaydedildiğinde onu kaydetmez, ancak ekranda gösterir ve düz metin dosyası boştur.

Bunun yerine, stderr'i dosyaya kaydetmeyi belirtmek için 2> kullanırsak:

ls foo 2> info.txt

Şimdi hata bilgilerini metin dosyasına kaydedecektir.

En Kabuk stderr ve stdout'un &> ile tek bir komutta depolanmasına izin verin, burada Foo var olmayan bir dizindir

ls İndirilenler Foo &> info.txt

Bu dosya, Foo'da ls çalıştırılırken oluşan hatanın bilgisini içerecek ve İndirilenler altındaki dizinleri listeleyecektir.

Ve son olarak, bu ünlü ne? 2> & 1?

Basit, stderr'i stdout'a yönlendirin. Bu &> ve 1'in ortasında, stdout'a yönlendirileceği anlamına gelir. Orada olmasaydı, "hatayı 1. dosyaya yönlendir" gibi bir şey olurdu.

Ve bununla aşağıdakileri yeniden yönlendirmek mümkündür:

  • bir dosyaya standart çıktı
  • stderr bir dosyaya
  • stdout'tan stderr'e
  • stderr'den stdout'a
  • stderr ve stdout bir dosyaya
  • inter alia olarak

Bugün insanlar için bu kadar. Uğradığınız için okuduk ve teşekkür ederiz. 😀


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   eliotime3000 dijo

    İlginç. Öğreticileriniz sayesinde Bash'i daha çok seviyorum.

  2.   Quincy magoo dijo

    Sevgili, ilginç, ancak aşağıdaki satırda bir hata var:

    "Ve dosyayı ls komutuna yeniden yönlendirirken", "ve dosyayı sıralama komutuna yeniden yönlendirirken" olmalıdır.

    Bir tebrik.

  3.   Miguel dijo

    Metnin başında bir hata var, "ls" komutunu belirttiğinizde, "sırala" olmalıdır:
    "Listedeki tüm bilgileri alın - bu durumda rastgele yazılan sayılar - ve dosyayı ls komutuna yönlendirin (burada sıralama olacaktır)"

    Selamlar ve çalışmalarınızı paylaştığınız için teşekkürler

  4.   yolcu dijo

    Bu, çıktının temizlenmesini (/ dev / null), ancak hataların dosyalarda saklanmasını istediğiniz cron için harikadır. Ayrıca, bunu yaptığımda, tam olarak ne zaman başarısız olduklarını belirtmek için genellikle date komutunu kullanırım.

    Bash (sh), Unix felsefesi tarafından geliştirilen bu araçlara sahiptir.

  5.   Lolo dijo

    Ben hiçbir şey bulamadım

    1.    Ses dijo

      Haha iyi anlatılıyor, neyi anlamadınız?