Warum definieren Scripts gemeinsame Befehle in Variablen?

8

Ich sehe das die ganze Zeit an meinem Arbeitsplatz:

%Vor%

Macht das nur meine Firma? Gibt es einen Grund, warum Sie erklären möchten, wo diese extrem gebräuchlichen Befehle sind? Warum sollte $CAT auf /usr/bin/cat verweisen, wenn cat bereits auf /usr/bin/cat verweist? Fehle ich etwas? Es scheint, als wäre es unnötig überflüssig.

    
R4F6 13.10.2015, 19:40
quelle

4 Antworten

12

Die Verwendung des vollständigen Pfadnamens stellt sicher, dass das Skript korrekt funktioniert, auch wenn es von einem Benutzer ausgeführt wird, der seine Umgebungsvariable PATH so anpasst, dass es andere Versionen dieser Befehle als erwartet findet.

Die Verwendung von Variablen vereinfacht das Schreiben des Skripts, sodass Sie nicht jedes Mal den vollständigen Pfadnamen eines Befehls schreiben müssen, wenn er im Skript angezeigt wird.

    
Barmar 13.10.2015, 20:02
quelle
4
  

Macht das nur meine Firma?

Nein.

  

Gibt es einen Grund, warum Sie genau erklären wollen, wo diese extrem gebräuchlichen Befehle sind?

Ja.

  

Warum sollte $CAT auf / usr / bin / cat verweisen, wenn cat bereits auf /usr/bin/cat verweist?

Sind Sie sicher cat bezieht sich immer auf /usr/bin/cat ? Was passiert, wenn Ihr Skript zufällig in einer Umgebung ausgeführt wird, in der sich ein anderer cat im Pfad befindet? Oder wo es einfach ein benutzergesteuertes Verzeichnis früher im Pfad gibt, wo ein Benutzer einen Rogue-Befehl cat installieren könnte? Wenn Ihr Skript jemals mit erhöhten Rechten ausgeführt wird, möchten Sie dann wirklich beliebigen Benutzern die Möglichkeit geben, alles zu tun, was sie für Ihr System benötigen?

Sind Sie sicher, dass cat angenommen ist, um immer auf /usr/bin/cat zu verweisen? Wenn das Skript jemals in einer Umgebung installiert wurde, in der ein anderes cat benötigt wird (zB /usr/local/bin/gnucat ), würden Sie dann lieber eine Zeile oder zwanzig ändern?

  

Vermisse ich etwas? Es scheint, als wäre es unnötig überflüssig.

Ja, du verpasst etwas.

Man möchte vermeiden, dass /usr/bin/cat überall dort ausgegeben wird, wo cat ausgeführt werden soll, und man möchte in der Lage sein, eine andere cat zu wählen (oder eine andere make oder% co_de) % oder grep ). Auf der anderen Seite möchte man potenziell gefährliche externe Einflüsse auf das Verhalten eines vertrauenswürdigen Skripts vermeiden. Definieren Sie den vollständigen Pfad zu dem Befehl in einer Shell-Variablen und verwenden Sie dann diese Variable zum Ausführen des Befehls, um diese Ziele zu erreichen.

    
John Bollinger 13.10.2015 20:10
quelle
3

Eine Möglichkeit, dies zu vermeiden und dennoch die Sicherheit zu haben, die Umgebung des Benutzers zu ignorieren, besteht darin, die Variablen im Skript explizit anzugeben.

%Vor%

Vielleicht gibt es andere: Überprüfen Sie die man-Seiten der Programme, die Sie in Ihrem Code verwenden.

    
glenn jackman 13.10.2015 20:11
quelle
2

Willkommen in dem Unternehmen, in dem nichts selbstverständlich ist.

Diese werden normalerweise definiert, um die korrekte Version zu gewährleisten oder env-Einstellungen über viele Felder hinweg zu erzwingen.

Ссылка

Auf diese Weise können Sie überprüfen, ob Verzeichnis existiert.

    
James 13.10.2015 19:43
quelle

Tags und Links