Wie man entdeckt, von in einem Bash -Skript aus dem Pfad, in dem sich das Skript befindet

Wie man entdeckt, von in einem Bash -Skript aus dem Pfad, in dem sich das Skript befindet

Wenn Sie komplexe Bash -Skripte entwickeln und verschiedene Skripte in einen Ordner einfügen, in dem ein Skript mit einem anderen interagiert, um beispielsweise mit dem Starten zu starten Andere Skripte mit einem voll qualifizierten Pfadname. Dies ist wichtig, da das erste Skript möglicherweise von außerhalb des Verzeichnisses des Skripts gestartet wurde. Wir hätten dies auch tun können, indem wir einen relativen Pfad verwenden, so dass das Lesen des Befehls, mit dem das aktuelle Skript gestartet wurde, nicht funktioniert.

In diesem Tutorial lernen Sie lernen:

  • Was zum PWD Befehl ist und was es tut
  • Wie man aus einem Bash -Skript entdeckt, in welchem ​​Weg das gleiche Skript ist?
Wie man entdeckt, von in einem Bash -Skript aus dem Pfad, in dem sich das Skript befindet

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Linux-Verteilungsunabhängige
Software BASH -Befehlszeile, Linux -basiertes System
Andere Jedes Dienstprogramm, das standardmäßig nicht in der Bash -Shell enthalten ist sudo apt-Get Installieren Sie den Dienstprogramm (oder yum install Für Redhat -basierte Systeme)
Konventionen # - Erfordert, dass Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sudo Befehl
$-erfordert, dass Linux-Commands als regulärer nicht privilegierter Benutzer ausgeführt werden

Was ist PWD?

Der PWD Der Befehl in Linux gibt die zurück Pfad Arbeitsverzeichnis bei Ausführung. Welchen Weg wir uns derzeit befinden und zuvor navigiert haben (oder wurden von unserem Betriebssystem eingesetzt, zum Beispiel, wenn wir eine Eingabeaufforderung/Terminal öffnen), wird bei der Ausführung zurückkehren, wenn wir ausführen PWD.

$ CD / $ PWD / $ CD / HOME $ PWD / HOME 


Hier haben wir uns in das Stammverzeichnis geändert (/) und ausgeführt PWD. Unser aktueller Weg war das Wurzelverzeichnis also / ist zurück gekommen. Wir haben uns dann in die verändert /heim Verzeichnis und ausgeführt PWD nochmal. Der zurückgegebene Weg ist jetzt /heim.

In einem Bash -Skript die PWD Der Befehl funktioniert auf die gleiche Weise. Es ist auch bemerkenswert zu wissen, dass wir aus einem Bash -Skript (und in der Befehlszeile außerhalb eines Bash -Skripts) die Special Betriebssystemvariable verwenden können $ Pwd Dies wird automatisch vom Betriebssystem auf dem neuesten Stand gehalten, um unseren aktuellen Pfad zu enthalten. Dies rettet uns davor, etwas wie eine Unterschale anzurufen, ich.e. Mypath = "$ (pwd)" wird nicht benötigt, wir können einfach das aufrufen $ Pwd Variable.

So können wir PWD verwenden, richtig?

Nicht genau. Stellen Sie sich die folgende Situation vor:

$ touch 'Mypath.Sh '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.Sch 

Hier haben wir ein Skript mit dem Namen definiert mein Weg.Sch und machte es ausführbar. Als nächstes springen wir ein Verzeichnis aus unserem Heimverzeichnis und führen unser Skript aus:

$ pwd /home /roel $ cd… $ ./Roel/MyPath.Sh /Zuhause 

Während die PWD Befehl in unserem mein Weg.Sch Das Skript funktioniert richtig, hier gibt es ein Problem: PWD hat den Weg zurückgegeben, in dem wir uns derzeit befinden, nämlich /heim während das Skript tatsächlich in der gespeichert ist /Home/Roel Verzeichnis!

Denken Sie an den Titel des Artikels; Wir suchen nach dem Pfad, in dem das Skript gespeichert ist! Wie können wir das finden??

Die Methode!

Während es in Bash keine spezielle Variable gibt, um den Pfad abzudecken, in dem das Skript gespeichert ist, gibt es eine einfache Methode, um ihn zu erhalten.

$ cd - /home /roel $ touch 'mypath2.Sh '$ echo'#!/bin/bash '>> mypath2.sh $ echo 'mypath = "$ (CD" $ (DirName \ $ 0) "&& pwd)"' >> mypath2.sh $ echo 'echo "$ mypath"' >> mypath2.sh $ chmod +x mypath2.Sch 


Hier haben wir ein sekundäres Skript mit dem Namen definiert MyPath2.Sch. Darin geben wir einen kleinen speziellen Code ($ (CD "$ (DirName \ $ 0)"; && PWD)) die den Pfad finden, in dem sich das Skript befindet (indem er in sein Verzeichnis wechselt, basierend auf dem \ $ 0 Variable (welcher Skriptname in der Art, wie wir es genannt haben, ist ich, ich.e. Verwenden eines potenziellen relativen oder vollständig qualifizierten Pfad CD) und anschließend das anfordern PWD (Pfad Arbeitsverzeichnis) dafür und gibt uns den voll qualifizierten Pfad.

Mal sehen, ob dies korrekter funktioniert als nur die Verwendung PWD:

$ cd… $ pwd /home $ ./home/mypath2.sh /home /roel 

Das Skript funktioniert richtig und obwohl MyPath2.Sch Wurde relativ aufgerufen, von außerhalb des Verzeichnisses, in dem sich das Skript befindet, spiegelte die Ausgabe die gesuchten Informationen korrekt wider. Der Weg, auf dem das Skript existiert. Wir haben dasselbe in der gespeichert $ Mypath Variable, und diese Variable kann jetzt verwendet werden, um beispielsweise aufzufordern $ Mypath/einhöses Skript.Sch Wo Einigehöre.Sch ist ein weiteres Skript im selben Verzeichnis wie MyPath2.Sch

Abschluss

In diesem Artikel schauen wir uns zuerst an PWD und ob es das vorliegende Problem erfüllen würde und herausfindet, den Weg, in dem unser Skript zu jeder Zeit liegt. Wohingegen PWD kann funktionieren, wenn wir die Verzeichnisse nicht geändert haben. Es funktioniert nicht richtig, wenn wir uns außerhalb des Weges befinden, in dem sich das Skript befindet. Wir haben dann ein kleines Stück Code vorgestellt (Mypath = "$ (CD" $ (DirName \ $ 0) "&& pwd)" Das wird immer das Verzeichnis zurückgeben, in dem unser Skript korrekt ist.

Ein kleines Stück Code, aber eine große Lösung für unser Bash -Skript -Codierungsproblem! Genießen!

Verwandte Linux -Tutorials:

  • ZIP -Ordner unter Linux
  • So verschieben Sie den Ordner auf Linux
  • So überprüfen Sie die Datenträgernutzung per Ordner unter Linux
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu installieren auf Ubuntu 20.04
  • So erstellen Sie komprimierte verschlüsselte Archive mit Tar und GPG
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Hung Linux System? Wie man zur Befehlszeile entkommt und…
  • Mastering -Bash -Skriptschleifen beherrschen
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4