Por que escapar caracteres triviais no shell script?

23

Acabei de abrir um script de shell herdado (escrito no antigo ksh88 no Solaris) e encontrei o seguinte repetido em todo o código:

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

A barra invertida me parece estranha.

Eu sei que é deliberado, já que esse tipo de fuga (aparentemente inútil) se repete por todo o código. O autor original já se foi há muito tempo, não consigo entrar em contato com ele para perguntar.

Isso é simplesmente uma idiossincrasia engraçada do autor ou é algum tipo de boa prática preterida que fazia sentido em algum momento? Ou talvez seja realmente a maneira recomendada de fazer as coisas e estou perdendo alguma coisa?

rahmu
fonte
3
Embora haja uma boa razão para isso, fornecer proteção contra alias em um script usando esse método não é o que eu chamaria de "recomendado". Seria suficiente limpar o alias na parte superior do script ou invocar rmpelo caminho completo.
precisa saber é o seguinte

Respostas:

25

Isso é usado para proteção de alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Ansgar Esztermann
fonte
5

Geralmente, é uma boa prática aplicar algumas salvaguardas para a rm, o que normalmente é alcançado por meio de alias. Em ambientes multiusuários, muitas vezes você vê muitas dessas proteções em vigor.

Para um profissional de script de shell, geralmente é útil desabilitar essas salvaguardas, pois, presumivelmente, eles sabem o que estão fazendo. Isso, como mencionado, é realizado precedendo o comando com um\ .

Ao contrário da sugestão de @ Sorpigal, eu recomendaria definitivamente não desabilitar os aliases, para que o script não devolva ao usuário suas salvaguardas. Além disso, o uso de um caminho completo também é imprudente, pois rm pode estar em um caminho auxiliar por uma razão - por exemplo, GNU rm vs. BSD rm. Substituí-lo por um caminho estrito seria derrotar o propósito de ter PATHs, ou seja, escalar e manipular muitas arquiteturas, ambientes e usuários.

fimbulvetr
fonte
3
Apesar de comum, o aliasing rmnão é uma prática boa, mas muito ruim e lamentável.
Jlliagre