Unix / Linux - Kabuk Giriş / Çıkış Yönlendirmeleri
Bu bölümde, Kabuk giriş / çıkış yönlendirmeleri hakkında ayrıntılı olarak tartışacağız. Çoğu Unix sistem komutu, terminalinizden girdi alır ve elde edilen çıktıyı terminalinize geri gönderir. Bir komut normalde girişini varsayılan olarak terminaliniz olan standart girişten okur. Benzer şekilde, bir komut normalde çıktısını standart çıktıya yazar, bu da varsayılan olarak sizin terminalinizdir.
Çıktı Yeniden Yönlendirme
Normalde standart çıktı için amaçlanan bir komutun çıktısı bunun yerine kolayca bir dosyaya yönlendirilebilir. Bu özellik, çıktı yeniden yönlendirme olarak bilinir.
Notasyon> dosyası, normalde çıktısını standart çıktıya yazan herhangi bir komuta eklenirse, bu komutun çıktısı terminaliniz yerine dosyaya yazılır.
Aşağıdakileri kontrol et who komutun tam çıktısını kullanıcılar dosyasında yeniden yönlendiren komut.
$ who > users
Terminalde hiçbir çıkışın görünmediğine dikkat edin. Bunun nedeni, çıktının varsayılan standart çıktı aygıtından (terminal) belirtilen dosyaya yeniden yönlendirilmiş olmasıdır. İçeriğin tamamı için kullanıcı dosyasını kontrol edebilirsiniz -
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
Bir komutun çıktısı bir dosyaya yeniden yönlendirilirse ve dosya zaten bazı veriler içeriyorsa, bu veriler kaybolur. Aşağıdaki örneği düşünün -
$ echo line 1 > users
$ cat users line 1 $
Çıktıyı mevcut bir dosyaya eklemek için aşağıdaki gibi >> operatörünü kullanabilirsiniz -
$ echo line 2 >> users $ cat users
line 1
line 2
$
Giriş Yönlendirme
Bir komutun çıktısının bir dosyaya yeniden yönlendirilebilmesi gibi, bir komutun girdisi de bir dosyadan yeniden yönlendirilebilir. Olarakgreater-than character > çıktı yeniden yönlendirmesi için kullanılırsa less-than character < bir komutun girişini yeniden yönlendirmek için kullanılır.
Normalde girdilerini standart girdiden alan komutların girdileri bu şekilde bir dosyadan yeniden yönlendirilebilir. Örneğin, kullanıcılar yukarıda oluşturulan dosyadaki satır sayısını saymak için aşağıdaki komutu çalıştırabilirsiniz -
$ wc -l users
2 users
$
Yürütme üzerine aşağıdaki çıktıyı alacaksınız. Dosyadaki satırların sayısını, dosyanın standart girişini yeniden yönlendirerek sayabilirsiniz.wcdosya kullanıcılarından komut -
$ wc -l < users
2
$
Wc komutunun iki biçimi tarafından üretilen çıktıda bir fark olduğunu unutmayın. İlk durumda, dosya kullanıcılarının adı satır sayısıyla listelenir; ikinci durumda, öyle değildir.
İlk durumda wc, girdisini dosya kullanıcılarından okuduğunu bilir. İkinci durumda, yalnızca girdisini standart girdiden okuduğunu bilir, bu nedenle dosya adını göstermez.
Burada Belge
Bir here document girdiyi etkileşimli bir kabuk betiğine veya programına yeniden yönlendirmek için kullanılır.
Etkileşimli program için gerekli girdiyi veya etkileşimli kabuk komut dosyasını sağlayarak, kullanıcı eylemi olmadan bir kabuk betiği içinde etkileşimli bir programı çalıştırabiliriz.
Genel form here belge -
command << delimiter
document
delimiter
Burada kabuk, <<Operatör, belirtilen sınırlayıcıyı içeren bir satır bulana kadar girişi okumak için bir talimat olarak. Sınırlayıcıyı içeren satıra kadar olan tüm giriş satırları daha sonra komutun standart girişine beslenir.
Sınırlayıcı, kabuğa herebelge tamamlandı. Onsuz, kabuk girdiyi sonsuza kadar okumaya devam eder. Sınırlayıcı, boşluk veya sekme içermeyen tek bir kelime olmalıdır.
Aşağıdaki komutun girdisidir wc -l toplam satır sayısını saymak için -
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
Kullanabilirsiniz here document komut dosyanızı kullanarak birden çok satırı aşağıdaki gibi yazdırmak için -
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
Aşağıdaki komut dosyası, vi metin editörü ve girişi dosyaya kaydeder test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
Bu betiği vi gibi davranan vim ile çalıştırırsanız, muhtemelen aşağıdaki gibi bir çıktı göreceksiniz -
$ sh test.sh Vim: Warning: Input is not from a terminal $
Komut dosyasını çalıştırdıktan sonra, aşağıdakilerin dosyaya eklendiğini görmelisiniz test.txt -
$ cat test.txt This file was created automatically from a shell script $
Çıkışı atın
Bazen bir komutu yürütmeniz gerekebilir, ancak çıktının ekranda görüntülenmesini istemezsiniz. Bu gibi durumlarda, çıktıyı dosyaya yeniden yönlendirerek atabilirsiniz./dev/null -
$ command > /dev/null
Burada komut, yürütmek istediğiniz komutun adıdır. Dosya/dev/null tüm girdilerini otomatik olarak atan özel bir dosyadır.
Bir komutun hem çıktısını hem de hata çıktısını atmak için, yeniden yönlendirmek için standart yeniden yönlendirmeyi kullanın STDERR -e STDOUT -
$ command > /dev/null 2>&1
Buraya 2 temsil eder STDERR ve 1 temsil eder STDOUT. STDOUT'u aşağıdaki gibi STDERR'a yönlendirerek STDERR'da bir mesaj görüntüleyebilirsiniz -
$ echo message 1>&2
Yönlendirme Komutları
Yönlendirme için kullanabileceğiniz komutların tam listesi aşağıdadır -
Sr.No. | Komut ve Açıklama |
---|---|
1 | pgm > file Pgm çıktısı dosyaya yeniden yönlendirilir |
2 | pgm < file Program pgm girdisini dosyadan okur |
3 | pgm >> file Pgm çıktısı dosyaya eklenir |
4 | n > file Açıklayıcı ile akıştan çıktı n dosyaya yönlendirildi |
5 | n >> file Açıklayıcı ile akıştan çıktı n dosyaya eklendi |
6 | n >& m Akıştan gelen çıktıyı birleştirir n akışla m |
7 | n <& m Akıştan gelen girdiyi birleştirir n akışla m |
8 | << tag Standart giriş buradan satırın başlangıcındaki bir sonraki etikete kadar gelir |
9 | | Bir programdan veya işlemden çıktı alır ve diğerine gönderir |
Dosya tanımlayıcısının 0 normalde standart giriştir (STDIN), 1 standart çıktıdır (STDOUT) ve 2 standart hata çıktısıdır (STDERR).