Czytam książkę, mówi:
Każdy proces ma co najmniej trzy kanały komunikacji: „standardowe wejście” (STDIN), „standardowe wyjście” (STDOUT) i „standardowy błąd” (STDERR).
Większość poleceń akceptuje ich dane wejściowe ze STDIN i zapisuje swoje dane wyjściowe do STDOUT. Piszą komunikaty o błędach do STDERR. Ta konwencja pozwala łączyć ze sobą polecenia, takie jak bloki konstrukcyjne, w celu tworzenia złożonych rurociągów.
Powłoka interpretuje symbole
<
,>
i>>
jak instrukcje do przekierowania wejścia polecenia lub wyjście do lub z pliku.Aby połączyć STDOUT jednego polecenia z STDIN drugiego, użyj
|
symbolu, zwanego potocznie potokiem.ps -ef | grep httpd
Zasadniczo chodzi o to, że standardowe wejście to polecenie, które pozwala użytkownikowi na zapis do pliku, podczas gdy standardowe wyjście to polecenie, które ma wyjście zapisu powłoki powłoki bash do powłoki, a standardowy błąd jest podobny do wyjścia, ale jest tylko wywoływane, gdy wystąpi błąd w systemie plików. Następnie przechodzimy do połączenia STDOUT i STDIN i jestem zgubiony.
standard input is a command that allows user to write to a file
Nie polecenie, ale strumień. Standardowe wejścia i wyjścia są jak skrzynki pocztowe. Kiedy program się uruchamia, otrzymuje on pole do odebrania i pole do wysłania poczty. Zazwyczaj dane wejściowe pochodzą z klawiatury i są umieszczane w skrzynce odbiorczej, poczta umieszczana w skrzynce odbiorczej kończy się na ekranie terminala.
standard output is a command that has the bash shell write output to the shell
Program tak naprawdę nie wie, gdzie wskazują standardowe punkty wyjściowe. Kiedy potokujesz od A do B (jak w
$ A | B
), kiedy A umieszcza pocztę w skrzynce nadawczej, kończy się w skrzynce odbiorczej B. B przetwarza dane wejściowe i umieszcza własną pocztę w skrzynce nadawczej, co widać na terminalu.Aby upuścić metafor, jak wspomniano, standardowymi wejściami / wyjściami są strumienie. Skrzynka pocztowa lub deskryptor pliku to jeden koniec strumienia. Do rury należy podłączyć standard z A do standardu z B.
źródło