Нужны объяснения поведения команд встроенной в Linux bash для Linux
ИзBash Справочное руководство Я получаю следующее оexec
встроенная команда bash:
Если указана команда, она заменяет оболочку без создания нового процесса.
Теперь у меня есть следующееbash
сценарий:
#!/bin/bash
exec ls;
echo 123;
exit 0
Это выполнено, я получил это:
cleanup.sh ex1.bash file.bash file.bash~ output.log
(files from the current directory)
Теперь, если у меня есть этот скрипт:
#!/bin/bash
exec ls | cat
echo 123
exit 0
Я получаю следующий вывод:
cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123
Мой вопрос:
Если когдаexec
вызываетсяон заменяет оболочку без создания нового процессазачем когда ставить| cat
,echo 123
печатается, но без него это не так. Итак, я был бы счастлив, если бы кто-нибудь смог объяснить, в чем логика такого поведения.
Благодарю.
РЕДАКТИРОВАТЬ: После ответа @torek, мне еще сложнее объяснить поведение:
1.exec ls>out
Команда создаетout
файл и положить в негоls
командный результат;
2.exec ls>out1 ls>out2
создает только файлы, но не помещает в них никакого результата. Если команда работает как предложено, я думаю, что команда № 2 должна иметь тот же результат, что и команда № 1 (даже больше, я думаю, что она не должна была создаватьout2
файл).