Unix benzeri sistemlerde, değiştirilmemişlerse ekranınıza çıkış gönderecekleri iki çıkış yolu vardır. Standart hata (veya stderr) çoğu hata ve hata koşulunu yakalayan hatadır.
Stderr'deki izin reddedilen iletiyi "normal çıktı" ile aynı çıktı akışına geçirmek için ikisini birleştirmelisiniz. Örnekte, grep -v
üzerinde doğru şekilde çalışabilmeniz için stdout (standart çıktı) ve stderr'i gördüğünüz arcane sözdizimi ile birleştirirsiniz.
Gönderen GNU Bash manuel bölüm 3.2.2 Boru hatları :
' |&
' Kullanılıyorsa, komut1’in standart hatası, standart çıkışına ek olarak, komut2’nin boru üzerinden standart girişine bağlanır; için stenodir 2>&1 |
. Standart hatanın standart çıktıya dolaysız yönlendirilmesi, komut tarafından belirtilen tüm yönlendirmelerden sonra gerçekleştirilir.
Ayrıca, geirha'nın işaret ettiği gibi, sadece stderr çıktısından kurtulmak istiyorsanız, bunun gibi bir şey yapmak istersiniz.
find -name 'myfile.*' 2> /dev/null
ya da belki
find -name 'myfile.*' 2> /tmp/errorlog
Ayrıca, komutun find
dizilişine xargs
sahipseniz , çıktısını size iletmek gibi komutun tüm bileşenlerinden çıktıyı yakalamak için komut satırının tamamını parantez içine koymanız gerekeceğini unutmayın. Örneğin,
(find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 ) 2> /dev/null
Eğer parantezleri bırakıp, bunun yerine yaptıysanız -
find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 2> /dev/null
yine de find veya egrep dosyasındaki izinleri reddedilen hataları görüyorsunuz, ancak stderr xargs için yönlendirilecek.
Gördüğünüz gibi, muhtemelen bir test çalıştırması sırasında içeriğini görüntüledikten sonra stderr komutunu atarsınız.
Not GNU olduğunu find
ve bildiğim kadarıyla söyleyebilirim, herhangi POSIX uyumlu find
, -print
opsiyon örtülü olduğunu. İsterseniz yine de açıkça sağlayabilirsiniz.