Отже, я видалив свою домашню папку (або, точніше, всі файли, до яких я мав доступ для запису). Що сталося, що я мав
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
.