Pour éviter que les fichiers existants ne soient écrasés par la redirection >
utilisez le noclobber
option en bash
ou tout shell de type POSIX (également en (t)csh
d'où provient réellement la fonctionnalité, bien que vous fassiez set noclobber
au lieu de set -o noclobber
/set -C
là). Ensuite, si vous devez forcer le remplacement d'un fichier, utilisez le >|
opérateur de redirection (>!
en (t)csh
).
Exemple :
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
BTW, vous pouvez vérifier les paramètres actuels avec set -o
:
$ set -o
...
monitor on
noclobber on
noexec off
...
Malheureusement, je soupçonne que vous devrez le réécrire. (Si vous avez des sauvegardes, c'est le moment de les sortir. Sinon, je vous recommande fortement de mettre en place un régime de sauvegarde pour l'avenir. De nombreuses options sont disponibles, mais hors sujet pour cette réponse.)
Je trouve que mettre les exécutables dans un répertoire séparé et ajouter ce répertoire au PATH
est utile. De cette façon, je n'ai pas besoin de référencer les exécutables par un chemin explicite. Mon répertoire de programmes préféré pour les scripts personnels (privés) est "$HOME"/bin
et il peut être ajouté au chemin de recherche du programme avec PATH="$HOME/bin:$PATH"
. Généralement, cela serait ajouté aux scripts de démarrage du shell .bash_profile
et/ou .bashrc
.
Enfin, rien ne vous empêche de vous retirer l'autorisation d'écriture sur tous les programmes exécutables :
touch some_executable.py
chmod a+x,a-w some_executable.py # chmod 555, if you prefer
ls -l some_executable.py
-r-xr-xr-x+ 1 roaima roaima 0 Jun 25 18:33 some_executable.py
echo "The hunting of the Snark" > ./some_executable.py
-bash: ./some_executable.py: Permission denied
Je conseille fortement d'avoir les scripts importants sous un dépôt git , synchronisé à distance (une plate-forme auto-hébergée sophistiquée fera l'affaire), comme le dit le commentaire de @ casey.
De cette façon, vous êtes protégé contre les mauvaises erreurs humaines telles que la restauration du fichier à l'état de fonctionnement précédent et son exécution à nouveau.