Bourne-again SHELL'in işleri yapma şeklini takip etmeyi genel olarak tavsiye ederim , çünkü bash tartışmasız en popüler Unix kabuğu. Bash tipik olarak ya &>
da kullanır 2>&1
. IMHO, ikisi de "mükemmel" değil, bu yüzden bu saçmalığı unutmayı tavsiye ederim. Gerçekçi olarak, hangisini kullanmanız gerektiği, ne yapmaya çalıştığınıza bağlıdır.
2>&1
stderr komutunu stdout ile birleştirir; örneğin, stderr metnini yayınlamak istediğinizde yararlı olabilir. Örneğin, bir programın belirli bir stderr mesajı yazdırıp yazdırmadığını görmek, ancak ekranınızın (muhtemelen) önemsiz çöplerle dolmasını istemiyorsanız program 2>&1 | grep crashed
, bir programdan stdout ve stderr'yi arayacak şekilde bir şey yapabilirsiniz. "çöktü" sözcüğü için "program" denir.
Öte yandan, bir programın herhangi bir şey yazdırmasını istemiyorsanız, basit bir şekilde çalışabilirsiniz program &> /dev/null
; bu, stderr ve stdout komutlarını / dev / null komutuna yönlendirir, işleri sihirli bir şekilde ortadan kaldıran özel bir dosyadır. Ya da bir programın çıktısını kaydetmek istiyorsanız (belki de bir hatayı bildirmek için), hem stderr hem de stdout'u bir dosyaya program &> log.txt
yönlendirebilirsiniz: tüm verileri "log.txt" adlı bir dosyaya yönlendirir. İsterseniz, stdout ve stderr komutunu , her ikisinin de kullanımıyla aynı etkiye sahip olacak şekilde program 2> log.txt > log.txt
veya aracılığıyla yönlendirebilirsiniz . Eğer böyle bir şey yaparsanız , sadece stdout yönlendirilecek, ancak stderr yukarıda gösterildiği gibi yönlendirilebilecek olan kedi gibi başka bir programa yönlendirilebilir. Ancak yazarakprogram 2>&1 | cat > log.txt
&>
program 2>&1 > file
&>
daha az karakter yazmayı içerdiğinden (ve insanların okuması biraz daha kolaydır), yukarıdaki örneklerin hepsinden daha kolaydır. program 2> log.txt > log.txt
Bash olmayan mermilerde daha fazla çalışabileceğini unutmayın .
Not: Diğer mermileri kullanan insanlar için endişeleniyorsanız, betiğinizin ilk satırına "sihirli sayı" veya "shebang" olarak ekleyebileceğiniz bir şey var. Bu aslında diğer bilgisayarların (özellikle Unix benzeri işletim sistemlerini çalıştıranların) bir komut dosyasını çalıştırmak için hangi programı kullanacaklarını bildiğinden emin olmanın bir yoludur. Farklı scriptler farklı shebanglar kullanır. Bir bash betiği için bir shebang şuna benzer:
#!/bin/bash
Yukarıdakileri belirli bir komut dosyasının ilk satırı olarak kullanırsanız, bash genellikle söz konusu komut dosyasını çalıştırmak için kullanılır. Bu, birisinin komut dosyasını yanlış kabukla yanlışlıkla çalıştırmasını zorlaştıracaktır.
Not: Yalan söylemeyeceğim: şimdiye kadar, birinin kullanabileceğini bilmiyordum >&
, ama bash kadarıyla aynı şekilde görünüyor &>
. Her gün yeni bir şey öğreniyorsun.