что подразумевается под подключением STDOUT и STDIN?

Это вопрос новичков. Я читаю книгу, она говорит:

Каждый процесс имеет по меньшей мере три канала связи: «стандартный вход» (STDIN), «стандартный вывод» (STDOUT) и «стандартная ошибка» (STDERR).

Большинство команд принимают их вход от STDIN и записывают их вывод в STDOUT. Они записывают сообщения об ошибках в STDERR. Это соглашение позволяет вам объединять команды, подобные строительным блокам, для создания составных конвейеров.

Оболочка интерпретирует символы < , > и >> как инструкции для перенаправления ввода или вывода команды в файл или из него.

Чтобы подключить STDOUT одной команды к STDIN другого, используйте | символ, обычно известный как труба.

 ps -ef | grep httpd 

Таким образом, в основном это означает, что стандартный ввод – это команда, которая позволяет пользователю писать в файл, тогда как стандартный вывод – это команда, которая имеет вывод оболочки оболочки bash в оболочку, а стандартная ошибка – это как вывод, но это только вызывается при возникновении ошибки в файловой системе. Затем мы добираемся до части подключения STDOUT и STDIN, и я теряюсь.

Стандартный ввод и стандартный вывод не являются командами.

Представьте себе команды как машины на заводе со сборочной линией. Большинство машин рассчитаны на наличие одной конвейерной ленты для подачи данных и одной конвейерной ленты для подачи данных; они являются стандартным входом и стандартным выходом соответственно. Стандартная ошибка – это отверстие на стороне машины, где он может выталкивать отклонения.

 +-------+ +------------------+ +------------------+ +------+ | input | | machine A | | machine B | |output| | reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket| | ‑voir | → | stderr | → | stderr | → | | +-------+ +------------------+ +------------------+ +------+ || || 

На приведенной выше диаграмме показана конвейерная лента, проходящая через две машины. Данные поступают из входного резервуара слева, подаются на машину A, затем вывод передается дальше на машину B (для которой он вводится), а выход машины B поступает в выходное ведро справа.

В терминах unix это называется конвейером . Метафора – это сантехника: труба соединяет машину А с машиной В. Синтаксис оболочки для вышеприведенного конвейера

 <input-file.txt commandA | commandB >output-file.txt 

Символ < redirection указывает оболочке для подключения стандартного ввода commandA к файлу input-file.txt перед запуском commandA . (Вы можете commandB перенаправление до или после имени команды.) Символ > redirection указывает оболочке подключить стандартный output-file.txt к output-file.txt . commandA pipe (" | ") в середине сообщает оболочке подключить стандартный вывод commandB к стандартным commandB перед их запуском.

Команды могут иметь более одного ввода и более одного выхода, но это материал для другого дня .

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 обрабатывает входные данные и помещает свою собственную почту в выходной ящик, что вы видите на терминале.

Чтобы отказаться от метафора, как уже упоминалось, стандартными входами / выходами являются потоки. Почтовый ящик или дескриптор файла – это один конец потока. К трубе следует подключить стандарт из A к стандарту в B.