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

Я решил его; последний пример должен быть похожим на это:

eval varAlias=\${"myvar"$varname[@]}
for varItem in ${varAlias[@]}
do
    echo $varItem
done
10
21.08.2018, 11:19
2 ответа

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

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

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

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

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

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

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

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

25
27.01.2020, 19:59
  • 1
    Визуальное помогло много –  JohnMerlino 10.02.2012, 03:46
  • 2
    Хорошая аналогия. Я понял понятие потокового конвейера много лет теперь, но так или иначе никто никогда не использовал фабрику / аналогия конвейера, которая делает его действительно легко (и кратко) понятным.Спасибо! –  Owen Blacker 28.02.2012, 20:34
  • 3
    Большая аналогия. Попытка одолжить этого, если Вы не возражаете. –  Tivie 30.05.2012, 18:31
  • 4
    Gilles, я задал вопрос на Вашей формулировке внизу: unix.stackexchange.com/q/96724/29146. Вы могли разъясниться? –  strugee 19.10.2013, 09:01

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

Программа на самом деле не знает, где стандарт указывает. Когда Вы передаете по каналу к B (как в $ A | B), когда A помещает почту в ящик исходящих сообщений, это заканчивается в ящике входящих сообщений B. B обрабатывает вход и помещает его собственную почту в ящик исходящих сообщений, который является тем, что Вы видите на терминале.

Для отбрасывания метафоры, как упомянуто, стандарт в / является потоками. Почтовый ящик или дескриптор файла, является одним концом потока. Передавать по каналу означает соединить стандарт из к стандарту в B.

6
27.01.2020, 19:59

Теги

Похожие вопросы