J'ai donc supprimé mon dossier personnel (ou plus précisément tous les fichiers auxquels j'avais accès en écriture). Qu'est-ce qui s'est passé, c'est que j'avais
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
dans un script bash et, après ne plus en avoir besoin $build, supprimer la déclaration et tous ses usages - sauf le rm. Bash s'étend joyeusement à rm -rf /*. Oui.
Je me suis senti stupide, installé la sauvegarde, refait le travail que j'ai perdu. Essayer de dépasser la honte.
Maintenant, je me demande: quelles sont les techniques pour écrire des scripts bash afin que de telles erreurs ne puissent pas se produire, ou du moins soient moins probables? Par exemple, avais-je écrit
FileUtils.rm_rf("#{build}/*")
dans un script en ruby, l'interprète se serait plaint de buildne pas avoir été déclaré, donc le langage me protège.
Ce que j’ai envisagé lors de bash, outre le corraling rm(qui, comme le soulignent de nombreuses réponses à des questions connexes, n’est pas sans poser de problèmes):
rm -rf "./${build}/"*
Cela aurait tué mon travail actuel (un dépôt Git) mais rien d’autre.- Une variante / paramétrage de
rmcette opération nécessite une interaction lorsque vous agissez en dehors du répertoire en cours. (Impossible d'en trouver.) Effet similaire.
Est-ce le cas ou existe-t-il d'autres moyens d'écrire des scripts bash "robustes" en ce sens?
set -un'est pas aussi mal vu qu'il l' set -eest, mais il a toujours ses pièges.
#! /usr/bin/env rubyen haut de chaque script shell et oublier bash;)
rm -rf "${build}/*ne pas savoir où vont les guillemets.rm -rf "${build}fera la même chose à cause de laf.