Нужны пояснения по поведению встроенной команды exec в Linux bash

Из Справочного руководства по Bashя получаю следующее о встроенной команде execbash:

Если указана команда, она заменяет оболочку без создания нового процесса.

Теперь у меня есть следующий скрипт 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).

36
задан Denilson Sá Maia 28 October 2016 в 12:53
поделиться