Diğerlerinin söylediği gibi, linux iki farklı çıkış akışı sağlar:
stdout veya "standart çıktı" tüm normal çıkışın olduğu yerdir.
Dosya tanımlayıcıyı kullanarak referans verebilirsiniz 1.
stderr veya "standart hata" bant dışı bilgi için ayrı bir akıştır.
Dosya tanımlayıcıyı kullanarak referans verebilirsiniz 2.
Neden iki farklı çıkış akışı? Hayali komutların bir ardışık düzenini düşünün:
decrypt $MY_FILE | grep "secret" | sort > secrets.txt
Şimdi decryptkomutun başarısız olduğunu ve bir hata mesajı oluşturduğunu düşünün . Bu mesajı stdoutgönderirse, boruya gönderir ve "gizli" kelimesi olmadıkça asla göremezsiniz. Böylece, neyin yanlış gittiğine dair bir fikriniz olmadan boş bir çıktı dosyası elde edersiniz.
Ancak, boru yalnızca yakaladığından stdout, decryptkomut hatalarını stderrkonsolda görüntülenecekleri yere gönderebilir .
Yönlendirebilir stdoutve stderrbirlikte veya bağımsız olarak şunları yapabilirsiniz:
# Send errors to "errors.txt" and output to "secrets.txt"
# The following two lines are equivalent, as ">" means "1>"
decrypt $MY_FILE 2> errors.txt > secrets.txt
decrypt $MY_FILE 2> errors.txt 1> secrets.txt
Hataları stdoutnormal çıktıdaymış gibi yönlendirebilir ve işleyebilirsiniz:
# The operation "2>&1" means "redirect file descriptor 2 to file
# descriptor 1. So this sends all output from stderr to stdout.
# Note that the order of redirection is important.
decrypt $MY_FILE > errors.txt 2>&1
# This may be confusing. It will store the normal output in a file
# and send error messages to stdout, where they'll be captured by
# the pipe and then sorted.
decrypt $MY_FILE 2>&1 > output.txt | sort
Ayrıca yönlendirmek için bir "steno" notasyonu kullanabilirsiniz hem aynı dosyaya stdout ve stderr:
decrypt $MY_FILE &> output.txt
Ve son olarak, >operatör ilk olacak kesmek yazmadan önce çıkış dosyası. Bunun yerine, mevcut bir dosyaya veri eklemek istiyorsanız , >>işleci kullanın :
decrypt $MY_FILE 2>> more_errors.txt >> more_secrets.txt
decrypt $MY_FILE >> more_output.txt 2>&1