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 decrypt
komutun başarısız olduğunu ve bir hata mesajı oluşturduğunu düşünün . Bu mesajı stdout
gö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
, decrypt
komut hatalarını stderr
konsolda görüntülenecekleri yere gönderebilir .
Yönlendirebilir stdout
ve stderr
birlikte 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ı stdout
normal çı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