Por que escapar de caracteres triviais no shell script?

22

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

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

A barra invertida de escape parece-me estranha.

Eu sei que é deliberado, já que esse tipo de fuga (aparentemente inútil) é repetido durante todo o código. O autor original está muito longe, não consigo entrar em contato com ele para perguntar a ele.

Isto é simplesmente uma idiossincrasia engraçada do autor ou é algum tipo de boa prática obsoleta que fazia sentido em algum momento no tempo? Ou talvez seja realmente a maneira recomendada de fazer as coisas e estou perdendo algo completamente?

    
por rahmu 05.04.2012 / 11:47

2 respostas

24

Isso é usado para proteção de alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
    
por 05.04.2012 / 11:51
5

Geralmente, é uma boa prática lançar algumas salvaguardas em rm, o que geralmente é obtido pelo aliasing. Em ambientes multiusuários, muitas vezes você verá muitas dessas proteções no lugar.

Para um praticante de scripts de shell, geralmente é útil desabilitar essas salvaguardas, presumivelmente, elas sabem o que estão fazendo. Isso, como mencionado, é realizado com o prefácio do comando com \ .

Ao contrário da sugestão do @Sorpigal, eu definitivamente aconselharia contra a desativação dos aliases, para que o script não devolva ao usuário suas salvaguardas. Além disso, usar um caminho completo também é insensato, pois rm pode estar em um caminho auxiliar por um motivo - isto é, GNU rm vs. BSD rm. Para substituí-lo por um caminho restrito seria para derrotar o propósito de ter PATHs, ou seja, para dimensionar e lidar com muitas arquiteturas, ambientes e usuários.

    
por 09.04.2012 / 19:32