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