¿Por qué escapar de los personajes triviales en el script de shell?

23

Acabo de abrir un script de shell heredado (escrito en el antiguo ksh88 en Solaris) y encontré lo siguiente repetido en todo el código:

[ -f $myfile ] && \rm -f $myfile

La barra invertida que se escapa me parece extraña.

Sé que es deliberado, ya que este tipo de escape (aparentemente inútil) se repite en todo el código. El autor original se fue hace mucho tiempo, no puedo ponerme en contacto con él para preguntarle.

¿Es esto simplemente una idiosincrasia divertida del autor o es una especie de buena práctica obsoleta que tuvo sentido en algún momento? ¿O tal vez es realmente la forma recomendada de hacer las cosas y me falta algo por completo?

rahmu
fuente
3
Aunque hay una buena razón para ello, proporcionar protección de alias en un script usando este método no es lo que yo llamaría "recomendado". Sería suficiente borrar el alias en la parte superior del script, o invocar rmpor ruta completa.
Sorpigal

Respuestas:

25

Esto se usa para la protección de alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Ansgar Esztermann
fuente
5

En general, es una buena práctica incluir algunas salvaguardas para rm, que generalmente se logra mediante alias. En entornos multiusuario, a menudo verá muchas de estas protecciones en su lugar.

Para un profesional de scripting de shell, a menudo es útil para uno deshabilitar estas salvaguardas ya que presumiblemente saben lo que están haciendo. Esto, como se mencionó, se logra al anteponer el comando con a \.

Contrariamente a la sugerencia de @ Sorpigal, definitivamente recomendaría no desarmar los alias, para que el script no le devuelva al usuario sus salvaguardas. Además, el uso de una ruta completa también es imprudente ya que rm puede estar en una ruta auxiliar por una razón, es decir, GNU rm vs. BSD rm. Anularlo con un camino estricto sería anular el propósito de tener PATH, es decir, escalar y manejar muchas arquitecturas, entornos y usuarios.

fimbulvetr
fuente
3
A pesar de ser común, el alias rmno es una práctica buena, sino bastante mala y desafortunada.
jlliagre