Я читаю книгу, в которой говорится:
У каждого процесса есть как минимум три канала связи: «стандартный ввод» (STDIN), «стандартный вывод» (STDOUT) и «стандартная ошибка» (STDERR).
Большинство команд принимают свои входные данные из STDIN и записывают свои выходные данные в STDOUT. Они пишут сообщения об ошибках в STDERR. Это соглашение позволяет объединять команды вместе, как строительные блоки, для создания составных конвейеров.
Оболочка интерпретирует символы
<
,>
и в>>
качестве инструкции для перенаправления ввода или вывода комманд или из файла.Чтобы подключить STDOUT одной команды к STDIN другой, используйте
|
символ, обычно известный как канал.ps -ef | grep httpd
Таким образом, в основном это говорит о том, что стандартный ввод - это команда, которая позволяет пользователю записывать в файл, в то время как стандартный вывод - это команда, имеющая вывод записи оболочки в bash, и стандартная ошибка аналогична выводу, но это только вызывается при возникновении ошибки в файловой системе. Затем мы переходим к соединению STDOUT и STDIN, и я заблудился.
standard input is a command that allows user to write to a file
Не команда, а поток. Стандартные входы и выходы похожи на почтовые ящики. Когда программа запускается, ей дают ящик для получения и ящик для отправки почты. Обычно ввод поступает с клавиатуры и помещается в почтовый ящик, а почта, помещенная в почтовый ящик, попадает на экран терминала.
standard output is a command that has the bash shell write output to the shell
Программа на самом деле не знает, где стандартные точки. Когда вы
$ A | B
отправляете по конвейеру от A до B (как в ), когда A отправляет почту в почтовый ящик, она попадает в почтовый ящик B. B обрабатывает ввод и помещает свою собственную почту в исходящий ящик, который вы видите на терминале.Для удаления метафоры, как уже упоминалось, стандартными входами / выходами являются потоки. Почтовый ящик или дескриптор файла является одним концом потока. К трубе стоит подключить стандарт из А к стандарту в Б.
источник