Also habe ich meinen Home-Ordner (oder genauer gesagt alle Dateien, auf die ich Schreibzugriff hatte) gelöscht. Was passiert ist, dass ich hatte
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
in einem Bash-Skript und nachdem Sie $builddie Deklaration und alle ihre Verwendungen nicht mehr benötigt haben , entfernen Sie sie - aber die rm. Bash dehnt sich glücklich aus rm -rf /*. Ja.
Ich fühlte mich dumm, habe das Backup installiert, die Arbeit, die ich verloren habe, überarbeitet. Der Versuch, die Schande hinter sich zu lassen.
Nun frage ich mich: Was sind Techniken, um Bash-Skripte so zu schreiben, dass solche Fehler nicht auftreten können oder zumindest weniger wahrscheinlich sind? Hatte ich zum Beispiel geschrieben
FileUtils.rm_rf("#{build}/*")
In einem Ruby-Skript hätte sich der Dolmetscher darüber beschwert, dass er buildnicht deklariert wurde, daher schützt mich die Sprache.
Was ich in bash außer dem Korralieren betrachtet habe rm(was, wie viele Antworten in verwandten Fragen erwähnen, nicht unproblematisch ist):
rm -rf "./${build}/"*
Das hätte meine aktuelle Arbeit (ein Git-Repo) getötet, aber sonst nichts.- Eine Variante / Parametrisierung
rmdavon erfordert Interaktion, wenn Sie außerhalb des aktuellen Verzeichnisses agieren. (Konnte keine finden.) Ähnliche Wirkung.
Ist es das oder gibt es andere Möglichkeiten, Bash-Skripte zu schreiben, die in diesem Sinne "robust" sind?
set -uist bei set -eweitem nicht so verpönt wie es ist, aber es hat immer noch seine Fallstricke.
#! /usr/bin/env rubyoben in jedes shell script schreiben und bash vergessen;)
rm -rf "${build}/*wohin die Anführungszeichen gehen.rm -rf "${build}wird das gleiche wegen der tunf.