❓ Вопрос: что произойдёт при выполнении следующего скрипта?
#!/bin/bash
echo "Start script"
exec sleep 10
echo "This will never be printed"
🔍 Варианты:
• a) Скрипт выведет обе строки и "заснёт"
• b) Скрипт выведет только первую строку
• c) Скрипт ничего не выведет
• d) Скрипт завершится с ошибкой
💡 Разбор:
Команда
exec в Bash заменяет текущий процесс оболочки на указанную команду — в данном случае, sleep 10. Это значит:• строка
echo "Start script" выполнится • строка
exec sleep 10 заменит текущий процесс на sleep • строка
echo "This will never be printed" никогда не будет выполнена, потому что процесс уже заменён✅ Правильный ответ: b) Скрипт выведет только первую строку
📌 Вывод:
exec — мощная, но коварная команда. Она не запускает процесс в фоне, а заменяет текущий, без возврата. Это может использоваться в:• заменах PID 1 в контейнерах
• написании минималистичных init-оболочек
• утечках в long-running скриптах, если
exec используется не по назначению🛠️ Совет: если вы хотите просто запустить команду — не используйте
exec, если только вы намеренно не хотите завершить текущий процесс оболочки.