Содержимое
🧠DevOps-задача: неочевидное поведение `exec` в Bash ❓Вопрос: что произойдёт при выполнении следующего скрипта? #!/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, если только вы намеренно не хотите завершить текущий процесс оболочки.