Из Справочного руководства по 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
).