Per evitare che i file esistenti vengano sovrascritti dal reindirizzamento >
usa il noclobber
opzione in bash
o qualsiasi shell simile a POSIX (anche in (t)csh
dove l'elemento ha effettivamente avuto origine, anche se fai set noclobber
invece di set -o noclobber
/set -C
là). Poi, se hai bisogno di forzare la sostituzione di un file, usa il >|
operatore di reindirizzamento (>!
in (t)csh
).
Esempio:
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
A proposito, puoi controllare le impostazioni correnti con set -o
:
$ set -o
...
monitor on
noclobber on
noexec off
...
Purtroppo sospetto che dovrai riscriverlo. (Se disponi di backup, questo è il momento di tirarli fuori. In caso contrario, ti consiglio vivamente di impostare un regime di backup per il futuro. Molte opzioni disponibili, ma fuori tema per questa risposta.)
Trovo che mettere gli eseguibili in una directory separata e aggiungere quella directory al PATH
è utile. In questo modo non ho bisogno di fare riferimento agli eseguibili tramite percorso esplicito. La mia directory di programmi preferita per gli script personali (privati) è "$HOME"/bin
e può essere aggiunto al percorso di ricerca del programma con PATH="$HOME/bin:$PATH"
. Tipicamente questo verrebbe aggiunto agli script di avvio della shell .bash_profile
e/o .bashrc
.
Infine, non c'è nulla che ti impedisca di rimuovere i permessi di scrittura per te stesso su tutti i programmi eseguibili:
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
Consiglio vivamente di avere gli script importanti sotto un repo git , sincronizzato in remoto (andrà bene una piattaforma self-hosted di fantasia), come dice il commento di @ casey.
In questo modo sei protetto da gravi errori umani come ripristinare il file allo stato di lavoro precedente ed eseguirlo di nuovo.