Jak powiedzieli inni, linux zapewnia dwa różne strumienie wyjściowe:
standardowe wyjście , czyli „standardowe wyjście”, jest tym, do czego trafiają wszystkie zwykłe wyjścia.
Możesz odwoływać się do niego za pomocą deskryptora pliku 1.
stderr lub „błąd standardowy” to osobny strumień dla informacji poza pasmem.
Możesz odwoływać się do niego za pomocą deskryptora pliku 2.
Dlaczego dwa różne strumienie wyjściowe? Rozważ szereg wymyślonych poleceń:
decrypt $MY_FILE | grep "secret" | sort > secrets.txt
Teraz wyobraź sobie, że decryptpolecenie kończy się niepowodzeniem i generuje komunikat o błędzie. Gdyby wysłał tę wiadomość stdout, wysłałby ją do potoku, a gdyby nie miał słowa „sekret”, nigdy by go nie zobaczył. W rezultacie otrzymałeś pusty plik wyjściowy, nie mając pojęcia, co poszło nie tak.
Ponieważ jednak rura tylko przechwytuje stdout, decryptpolecenie może wysłać swoje błędy do stderr, gdzie zostaną wyświetlone na konsoli.
Możesz przekierować stdouti stderrrazem lub osobno:
# 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
Możesz przekierować błędy stdouti przetworzyć je tak, jakby były normalnym wyjściem:
# 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
Można również użyć „skrótowej” notacji przekierować zarówno stdout i stderr do tego samego pliku:
decrypt $MY_FILE &> output.txt
I na koniec >operator najpierw obetnie swój plik wyjściowy przed zapisaniem do niego. Jeśli zamiast tego chcesz dołączyć dane do istniejącego pliku, użyj >>operatora:
decrypt $MY_FILE 2>> more_errors.txt >> more_secrets.txt
decrypt $MY_FILE >> more_output.txt 2>&1