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.
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.
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, wenncat
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.
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.
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.