exec Команда замінює поточний процес оболонки з вказаною командою. Зазвичай при запуску команди новий процес створюється (роздвояється). exec Команда не породжує новий процес. Натомість поточний процес перекривається новою командою. Іншими словами execкоманда виконується замість поточної оболонки без створення нового процесу.
Існує три найпоширеніших використання команди exec:
1. Заміна процесу
Приклад-1:
Якщо ви відкриєте новуbashоболонку як
$ bash
в pstreeній схоже
├─gnome-термінал
├─bash────bash───pstree
Попередня bashоболонка все ще є, і ви отримали нову bashоболонку. Враховуючи, що якщо ви відкриєте нову оболонку bash як,
$ exec bash
на pstreeшоу
├─gnome-термінал
├─bash───pstree
Тут старе bashзамінено новим. Особливо корисно вийти з декількох логінів в одній команді. Це більш безпечно і усуває шанс залишити відкритий термінал помилково. Див. Вихід із кореня та користувача за допомогою однієї команди
Приклад-2: ви можете відкрити файл як
$ exec vi filename.txt
Після завершення роботи viнемає необхідності закривати термінал окремо, оскільки оболонка вже замінена. Як тільки ви закриєте, термінал також закривається.
2. Метод перенаправлення дескрипторів файлів у скриптах оболонки
exec Команда також може бути використана в скриптах динамічно відкривати, закривати і копіювання файлових дескрипторів. Це дозволяє виконувати перенаправлення STDIN, STDERR, STDOUT та інших дескрипторів файлів до різних файлів всередині скрипту оболонки, а не рядка виклику команд. Якщо ви не вказали команду чи аргументи, ви можете вказати символи перенаправлення та дескриптори файлів для виконання цих функцій.
Скажімо, у вас є сценарій оболонки, для script.shякого потрібно мати файл журналу script.log, який ви можете використовувати execяк
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
що еквівалентно
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Створення етапів процесу за допомогою команди exec
Ви також можете скористатися командою exec для створення набору скриптів оболонки, які виконують один одного послідовно, як етапи процесу. Замість нерестування нових процесів кожен раз, коли вам потрібно перенести керування в наступний скрипт, який ви виконуєте команду exec.
У цьому випадку останнім висловом кожного етапу має бути execкоманда, яка викликає наступний етап.
Докладніше див. Про використання execкоманди в скриптах оболонки .
Примітка: Частина вище взята з цього.