Para evitar que los archivos existentes se sobrescriban mediante la redirección >
utiliza el noclobber
opción en bash
o cualquier shell tipo POSIX (también en (t)csh
donde realmente se originó la característica, aunque sí set noclobber
en lugar de set -o noclobber
/set -C
allá). Luego, si necesita forzar el reemplazo de un archivo, use el >|
operador de redirección (>!
en (t)csh
).
Ejemplo:
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
Por cierto, puedes comprobar la configuración actual con set -o
:
$ set -o
...
monitor on
noclobber on
noexec off
...
Lamentablemente, sospecho que tendrás que volver a escribirlo. (Si tiene copias de seguridad, este es el momento de sacarlas. De lo contrario, le recomiendo encarecidamente que configure un régimen de copias de seguridad para el futuro. Hay muchas opciones disponibles, pero fuera de tema para esta respuesta).
Encuentro que poner los ejecutables en un directorio separado y agregar ese directorio al PATH
es útil. De esta manera, no necesito hacer referencia a los ejecutables por ruta explícita. Mi directorio de programas preferido para scripts personales (privados) es "$HOME"/bin
y se puede agregar a la ruta de búsqueda del programa con PATH="$HOME/bin:$PATH"
. Por lo general, esto se agregaría a los scripts de inicio de shell .bash_profile
y/o .bashrc
.
Finalmente, no hay nada que le impida quitarse el permiso de escritura en todos los programas ejecutables:
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
Recomiendo encarecidamente tener los guiones importantes bajo un repositorio git , sincronizado de forma remota (una elegante plataforma autohospedada servirá), como dice el comentario de @casey.
De esta manera, está protegido contra errores humanos graves, como revertir el archivo al estado de trabajo anterior y ejecutarlo nuevamente.