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