Koştuğunuzda:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Aslında yalnızca Akış 1'in (yani stdout
) çıktısını yeniden yönlendiriyorsunuzdur /dev/null
.
Bu, bir programın normal yürütülmesi tarafından üretilen çıktıyı yeniden yönlendirmek istediğinizde sorun değildir. Ancak, tüm hataların, uyarıların veya hataların neden olduğu çıkışı da yeniden yönlendirmek isterseniz, stderr
veya Standart Hata akışını da yeniden yönlendirmelisiniz /dev/null
.
Bunu yapmanın bir yolu, yeniden yönlendirme operatörüne yeniden yönlendirmek istediğiniz akış sayısını şu şekilde eklemektir >
:Command 2> /dev/null
Bu nedenle, komutunuz şöyle görünecektir:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Ancak, zaten bir akışı yeniden yönlendirdiğimizi unutmayın /dev/null
. Neden aynı yönlendirmede sırtıma değil? Bash, yönlendirilecek akış numarasını belirterek bunu yapmamıza izin verir. 2>&1
.
&
Yönlendirme işlecinden sonraki karaktere dikkat edin . Bu, kabuğa bir sonraki adımın bir dosya adı olmadığını, ancak çıktı akışı için bir tanımlayıcı olduğunu söyler.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Yönlendirme operatörlerine dikkat edin, sıralamaları çok önemlidir. Yanlış sırada yeniden yönlendirirseniz, beklenmedik sonuçlarla karşılaşırsınız.
Sessizliğe tam olarak erişebilmenin başka bir yolu, tüm çıkış akışlarını /dev/null
bu kısayolu kullanarak &>/dev/null
yeniden yönlendirmektir : (veya ile bir günlük dosyasına yönlendirebilirsiniz &>/path/to/file.log
).
Bu nedenle, komutunuzu şu şekilde yazın:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
öyle. Anlık yardım için hepinize teşekkürler!