Pourquoi échapper à des caractères triviaux dans un script shell?

23

Je viens d'ouvrir un script shell hérité (écrit en ancien ksh88 sur Solaris) et j'ai trouvé ce qui suit répété tout au long du code:

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

La barre oblique inverse qui m'échappe me semble étrange.

Je sais que c'est délibéré, car ce type d'échappement (apparemment inutile) est répété tout au long du code. L'auteur original est parti depuis longtemps, je ne peux pas le contacter pour lui demander.

Est-ce simplement une idiosyncrasie amusante de l'auteur ou est-ce une sorte de bonne pratique déconseillée qui avait du sens à un moment donné? Ou peut-être est-ce en fait la façon recommandée de faire les choses et il me manque quelque chose?

rahmu
la source
3
Bien qu'il y ait une bonne raison à cela, fournir une protection d'alias dans un script utilisant cette méthode n'est pas ce que j'appellerais «recommandé». Il suffirait d'effacer l'alias en haut du script, ou d'appeler rmpar chemin complet.
Sorpigal

Réponses:

25

Ceci est utilisé pour la protection des alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Ansgar Esztermann
la source
5

Il est généralement recommandé de mettre en place des garanties pour rm, ce qui est généralement obtenu par aliasing. Dans les environnements multi-utilisateurs, vous verrez souvent bon nombre de ces protections en place.

Pour un praticien de script shell, il est souvent utile pour l'un de désactiver ces protections car, vraisemblablement, il sait ce qu'il fait. Ceci, comme mentionné, est accompli en faisant précéder la commande d'un \.

Contrairement à la suggestion de @ Sorpigal, je déconseillerais définitivement de supprimer les alias, de peur que le script ne redonne à l'utilisateur ses garanties. De plus, l'utilisation d'un chemin complet est également imprudente car rm peut être dans un chemin auxiliaire pour une raison - c'est-à-dire GNU rm contre BSD rm. Le remplacer par un chemin strict reviendrait à contrecarrer le but d'avoir des CHEMINS, à savoir, faire évoluer et gérer de nombreuses architectures, environnements et utilisateurs.

fimbulvetr
la source
3
Bien qu'il soit courant, le repliement rmn'est pas une bonne pratique, mais assez mauvaise et malheureuse.
jlliagre