La razón por la noclobber
que no se establece por defecto es la tradición. Como cuestión de diseño de interfaz de usuario, es una buena idea hacer que "crear este nuevo archivo" sea una acción fácil y poner un obstáculo adicional a la acción más peligrosa "ya sea crear un nuevo archivo o sobrescribir un archivo existente". Por noclobber
lo tanto, es una buena idea ( >
crear un nuevo archivo, >|
potencialmente sobrescribir un archivo existente) y probablemente habría sido el valor predeterminado si el shell se hubiera diseñado unas décadas más tarde.
Recomiendo usar lo siguiente en su archivo de inicio de shell interactivo ( .bashrc
o .zshrc
):
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
En cada caso (redirección, copia, movimiento), el objetivo es agregar un obstáculo adicional cuando la operación puede tener el efecto secundario de borrar algunos datos existentes, a pesar de que borrar los datos existentes no es el objetivo principal de la operación. No pongo rm -i
en esta lista porque el objetivo principal es borrar datos rm
.
Tenga en cuenta que noclobber
y -i
son redes de seguridad . Si se disparan, has hecho algo mal . ¡Así que no los use como excusa para no verificar lo que está sobrescribiendo! El punto es que deberías haber verificado que el archivo de salida no existe. Si le dicen file exists: foo
o overwrite 'foo'?
, significa que cometió un error y debe sentirse mal y tener más cuidado. En particular, no tenga el hábito de decir y
si se le pide que sobrescriba (podría decirse que los alias deberían serlo alias cp='yes n | cp -i' mv='yes n | mv -i'
, pero presionar Ctrl+ Chace que la salida se vea mejor): si quiso sobrescribir, cancele el comando, mueva o elimine la salida archivo y ejecute el comando nuevamente.
También es importante no acostumbrarse a activar esos dispositivos de seguridad porque si lo hace, algún día estará en una máquina que no tiene su configuración, y perderá datos porque las protecciones con las que contaba no son t allí.
noclobber
solo se configurará para shells interactivos, ya que .bashrc
o .zshrc
solo se leerá con shells interactivos. Por supuesto, no debe cambiar las opciones de shell de una manera que afecte los scripts, ya que podría romper esos scripts.
rm *
...