Выбор ответа Senior Bash-скрипты обновлено
Опасная пара cd и rm
Вопрос
Почему строка cd "$BUILD_DIR"; rm -rf * в скрипте без set -e считается опасной?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Если cd не удался, rm удалит всё в текущем каталоге. Без проверки результата cd следующая команда выполнится в том каталоге, где скрипт оказался: в исходном или, при пустой переменной, в $HOME.
Варианты ответа
rm -rf *не удаляет скрытые файлы, и сборка останется грязной- Если
cdне удался,rmудалит всё в текущем каталогеправильный ответ - Точка с запятой запускает команды параллельно,
rmопередитcd *не раскрывается после;, иrmполучит буквальную звёздочку
Разбор
Без проверки результата cd следующая команда выполнится в том каталоге, где скрипт оказался: в исходном или, при пустой переменной, в $HOME. Правильно cd "$BUILD_DIR" || exit 1 или rm -rf -- "${BUILD_DIR:?}"/*, где :? прервёт скрипт при пустой переменной. То, что * не захватывает скрытые файлы, правда, но опасность не в этом. ; выполняет команды последовательно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.