У меня есть последовательность команд, которую я не могу понять:
[me@mine ~]$ (echo 'test'; cat) | bash
echo $?
1
echo 'this is the new shell'
this is the new shell
exit
[me@mine ~]$
Насколько я понимаю, вот что происходит:
- Труба создана.
- стандартный вывод
echo 'test'
отправляется в канал.
- bash получает 'test' на стандартный ввод.
echo $?
возвращает 1, что происходит, когда вы запускаете test
без аргументов.
cat
работает.
- Копирует стандартный ввод в стандартный вывод.
- стандартный вывод отправляется на канал.
bash
выполнит все, что вы введете, но stderr не будет выведен на экран (мы использовали |
, а не |&
).
У меня три вопроса:
Похоже, что хотя мы запускаем две команды, мы используем один и тот же канал и bash
процесс для обеих команд. Это тот случай?
Куда идут подсказки?
Когда что-то наподобие cat использует stdin, требуется ли ему эксклюзивное владение stdin, пока работает оболочка, или другие вещи могут его использовать?
Я подозреваю, что мне не хватает некоторых деталей с ttys, но я не уверен. Любая помощь или детали или man
выдержка приветствуется!