GNU/Linux >> Tutoriales Linux >  >> Linux

Utilizó accidentalmente la redirección de salida > en lugar de una tubería |

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.


Linux
  1. Lea y escriba datos desde cualquier lugar con redirección en la terminal de Linux

  2. ¿Cómo canalizo o redirijo la salida de curl -v?

  3. redirección de salida sobre la marcha, viendo la salida de redirección de archivos mientras el programa aún se está ejecutando

  4. generar la segunda columna de un archivo

  5. ¿Cómo redirigir la salida de system() a un archivo?

¿Redirigir al mismo archivo que el archivo de origen procesado por el comando?

Shell Scripting Parte 4:entrada, salida y redirección

Guardar la salida de un comando desde la terminal de Debian a un archivo

Comprender el directorio /etc/sysconfig

¿Cómo agregar la salida a un archivo?

diff para generar solo los nombres de los archivos