Wie man entdeckt, von in einem Bash -Skript aus dem Pfad, in dem sich das Skript befindet
- 4652
- 347
- Marleen Weight
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?
Softwareanforderungen und Konventionen verwendet
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
- « Was ist DMESG unter Linux und wie benutze ich es??
- Mint 20 besser als Ubuntu und Microsoft Windows? »