Ich habe gerade ein älteres Shell-Skript geöffnet (geschrieben im alten KSH88 unter Solaris) und habe festgestellt, dass sich das Folgende im gesamten Code wiederholt:
[ -f $myfile ] && \rm -f $myfile
Der entkommende Backslash kommt mir seltsam vor.
Ich weiß, dass es Absicht ist, da diese Art (anscheinend nutzloser) Escape-Methode im gesamten Code wiederholt wird. Der ursprüngliche Autor ist schon lange tot, ich kann ihn nicht erreichen, um ihn zu fragen.
Handelt es sich hier einfach um eine lustige Eigenart des Autors oder um eine Art veraltete bewährte Vorgehensweise, die zu einem bestimmten Zeitpunkt sinnvoll war? Oder ist dies vielleicht tatsächlich die empfohlene Vorgehensweise und ich übersehe etwas ganz und gar?
Antwort1
Dies dient dem Aliasschutz:
$ ls
.bashrc a b
$ alias ls
alias ls='ls $LS_OPTIONS'
$ \ls
a b
Antwort2
Es ist im Allgemeinen eine gute Praxis, einige Sicherheitsvorkehrungen für rm zu treffen, was normalerweise durch Aliasing erreicht wird. In Mehrbenutzerumgebungen werden Sie viele dieser Schutzmaßnahmen häufig vorfinden.
Für einen Shell-Scripting-Anwender ist es oft sinnvoll, diese Sicherheitsvorkehrungen zu deaktivieren, da er vermutlich weiß, was er tut. Dies wird, wie erwähnt, erreicht, indem dem Befehl ein vorangestellt wird \
.
Entgegen dem Vorschlag von @Sorpigal würde ich definitiv davon abraten, die Aliase zu löschen, da das Skript dem Benutzer sonst seine Schutzfunktionen nicht zurückgeben kann. Außerdem ist die Verwendung eines vollständigen Pfads auch unklug, da rm aus einem bestimmten Grund in einem Hilfspfad enthalten sein kann – z. B. GNU rm vs. BSD rm. Ihn durch einen strikten Pfad zu überschreiben, würde den Zweck von PATHs zunichtemachen, nämlich die Skalierung und Handhabung vieler Architekturen, Umgebungen und Benutzer.