Warum in Shell-Skripten mit einfachen Zeichen umgehen?

22

Ich habe gerade ein älteres Shell-Skript (geschrieben in ksh88 unter Solaris) geöffnet und festgestellt, dass sich Folgendes im gesamten Code wiederholt:

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

Der entkommende Backslash kommt mir komisch vor.

Ich weiß, dass es absichtlich ist, da diese Art der (scheinbar nutzlosen) Flucht im gesamten Code wiederholt wird. Der ursprüngliche Autor ist schon lange nicht mehr da, ich kann ihn nicht kontaktieren, um ihn zu fragen.

Ist das einfach eine lustige Eigenart des Autors oder ist es eine Art veraltete gute Praxis, die irgendwann Sinn ergab? Oder ist das eigentlich die empfohlene Vorgehensweise und ich vermisse etwas ganz anderes?

rahmu
quelle
3
Obwohl es einen guten Grund dafür gibt, würde ich Alias-Schutz in einem Skript mit dieser Methode nicht als "empfohlen" bezeichnen. Es würde ausreichen, den Alias ​​am oberen Rand des Skripts zu löschen oder rmüber den vollständigen Pfad aufzurufen .
Sorpigal

Antworten:

24

Dies wird für den Alias-Schutz verwendet:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Ansgar Esztermann
quelle
5

Es ist im Allgemeinen eine gute Praxis, einige Sicherheitsvorkehrungen für rm zu treffen, was normalerweise durch Aliasing erreicht wird. In Mehrbenutzerumgebungen werden Sie häufig feststellen, dass viele dieser Schutzfunktionen vorhanden sind.

Für einen Anwender von Shell-Skripten ist es oft nützlich, 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 deaktivieren, damit das Skript dem Benutzer nicht seine Sicherheit zurückgibt. Darüber hinaus ist die Verwendung eines vollständigen Pfades ebenfalls unklug, da sich rm aus einem bestimmten Grund in einem Hilfspfad befinden kann - z. B. GNU rm vs. BSD rm. Es mit einem strengen Pfad zu überschreiben, würde den Zweck von PATHs zunichte machen, nämlich viele Architekturen, Umgebungen und Benutzer zu skalieren und zu handhaben.

fimbulvetr
quelle
3
Aliasing rmist zwar üblich, aber keine gute, sondern eine schlechte und unglückliche Praxis.
Juli