Итак, я удалил свою домашнюю папку (или, точнее, все файлы, к которым у меня был доступ для записи). Что случилось то, что у меня было
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
в bash-скрипте и, после того, как больше не нужно $build
, удалить объявление и все его использования - кроме rm
. Баш радостно расширяется rm -rf /*
. Да.
Я почувствовал себя глупо, установил резервную копию, переделал потерянную работу. Пытаясь пройти мимо позора.
Теперь я задаюсь вопросом: каковы методы написания сценариев bash, чтобы такие ошибки не возникали или, по крайней мере, менее вероятны? Например, если бы я написал
FileUtils.rm_rf("#{build}/*")
в сценарии на Ruby переводчик жаловался на то, что его build
не объявили, поэтому язык защищает меня.
То, что я рассмотрел в bash, помимо загона rm
(что, как упоминают многие ответы в смежных вопросах, не является проблемой):
rm -rf "./${build}/"*
Это убило бы мою текущую работу (репозиторий Git), но ничего больше.- Вариант / параметризация
rm
этого требует взаимодействия при работе вне текущего каталога. (Не удалось найти.) Подобный эффект.
Это так или есть другие способы написания bash-скриптов, которые в этом смысле «надежны»?
set -u
не так хмурится, как set -e
есть, но у него все еще есть свои ошибки.
#! /usr/bin/env ruby
в начало каждого сценария оболочки и забудьте о bash;)
rm -rf "${build}/*
независимо от того, куда идут кавычки.rm -rf "${build}
будет делать то же самое из-заf
.