Holen Sie sich den absoluten Weg eines Skripts in Bash

Holen Sie sich den absoluten Weg eines Skripts in Bash
Ein Pfad ist ein Ort zu einem Verzeichnis oder einer Datei. Es gibt zwei verschiedene Arten von Pfaden unter Linux - absolut und relativ. Der relative Pfad wird unter Verwendung des aktuellen Arbeitsverzeichnisses bestimmt. Andererseits ist der absolute Pfad der vollständige Pfad zu einer Datei oder einem Verzeichnis. Insbesondere der vollständige Pfad wird aus dem Stammverzeichnis angegeben. Eine einfache Möglichkeit, sich daran zu erinnern. Ein relativer Pfad beginnt nicht mit a / (dem Stammordner). In diesem Tutorial lernen wir, wie man den absoluten Weg eines Skripts in Bash bekommt.

Absoluter Pfad

Lassen Sie uns zunächst ein einfaches Verzeichnis, Unterverzeichnisse und Dateien erstellen.

In diesem Beispiel, wenn LinuxHint unser aktuelles Arbeitsverzeichnis ist, dann der absolute Pfad des Dateiskripts.Sh ist:

/Home/Kalyani/Desktop/LinuxHint/Project2/Skript.Sch

Unser relativer Weg ist:

Project2/Skript.Sch

Was Sie hier bemerken können, ist das, um die Datei mit dem Namen Skript abzurufen.SH, wenn wir einen absoluten Weg haben, können wir ihn von überall im Linux -Ökosystem abrufen. Unser relativer Weg ist nicht so flexibel; Andererseits hängt es vom aktuellen Arbeitsverzeichnis ab. Im vorherigen Fall, wenn wir im LinuxHint -Verzeichnis waren und es unser aktuelles Arbeitsverzeichnis war, dann, um auf das Skript zuzugreifen.SH, wir müssten project2/script eingeben.Sch. Beachten Sie, wie es zu Beginn des relativen Weges kein / zu Beginn des relativen Weges gibt.

Unser Ziel ist es, die vollständige Adresse oder den vollständigen Pfad des Skripts abzurufen (absoluter Pfad).sh einen relativen Weg.

Readlink

Ein Befehl, mit dem Sie die vollständige Adresse einer Datei oder eine ausführbare Datei erfassen können, ist Readlink. Readlink wird normalerweise verwendet, um den Pfad eines symbolischen Links oder einer kanonischen Datei zu erfassen. Readlink kann jedoch auch den absoluten Pfad berechnen. In allen Fällen müssen Sie ein Flag an Readlink anbringen. Die am häufigsten verwendete Flagge in solchen Fällen ist die F -Flagge.

Beispiel Nr. 1 - Readlink mit dem F -Flag

Skript.Sch
#!/Bin/Bash
Path = 'Readlink -f “$ Bash_Source: -$ 0' ''
DIR_PATH = 'DIRNAME $ PATH'
Echo 'Der absolute Weg ist' $ path ist
Echo '---------------------------------------------'
Echo 'Der Verzeichnispfad ist' $ dir_path

Normalerweise wird $ 0 verwendet, um den Pfad des Skripts zu erhalten. Dies funktioniert jedoch nicht immer. Eine zuverlässigere oder robustere Art, den relativen Pfad des Skripts zu erhalten, besteht darin, $ bash_source:-$ 0 zu verwenden.

Nehmen wir für eine Instanz an, dass ich Echo $ Bash_Source schreibe:-$ 0, das Ergebnis, das ich bekomme, ist ./Skript.Sch. Dies ist der nicht nachhaltige Pfad zu unserer aktuellen Skriptdatei. Das heißt, der Ort des ausführenden Skripts wird in $ bash_source gespeichert:-$ 0.

Sobald wir den Pfad des Skripts zuverlässig abrufen, können wir ihn mit der F -Flagge an Readlink weitergeben. Anschließend können wir den Befehl DirName verwenden, um den Verzeichnispfad abzurufen. Der Befehl DirName lässt den letzten Wert des Pfades aus und geben den Rest zurück.

Also, wenn wir einen Weg von/home/kalyani/desktop/linuxHint/project2/script haben.sh, und wir wenden DirName darauf an, wir werden/home/kalyani/desktop/linuxHint/project2. Dadurch wurde der Grundname oder den Namen des Skripts aus der Adresse oder dem Pfad bezogen.

Realpath

Ein weiterer Befehl, der verwendet werden kann, ist Realpath. RealPath ist ein Linux -Befehl zum Drucken des behobenen absoluten Dateinamens. Es erfordert, dass alle Komponenten bis auf die letzte Komponente existieren.

Skript.Sch
#!/Bin/Bash
path = $ (realPath “$ bash_source:-$ 0”)
Echo 'Der absolute Weg ist' $ path ist
Echo '-------------------------------'
Dir_path = $ (Dirname $ path)
Echo 'Der Verzeichnispfad ist' $ dpath

Hier erhalten wir noch einmal den Pfad des Skripts mit $ bash_source:-$ 0. RealPath holt den vollständigen Weg für Sie, und Dirname erhält alle bis auf den letzten Wert des absoluten Pfades.

Alternative #1

Nehmen wir nun an, dass Sie nicht das Privileg hatten, RealPath oder Readlink zu verwenden. Es kommt nicht mit allen Linux -Systemen! Ich hatte das Glück, Ubuntu benutzt zu haben und konnte daher darauf zugreifen. Eine lange Möglichkeit, dasselbe zu tun, besteht jedoch wie folgt:

Skript.Sch
#!/Bin/Bash
DIR_PATH = $ (CD $ (DIRNAME "$ BASH_SOURCE:-$ 0") && PWD)
Path = $ DIR_PATH/$ (BASENAME "$ BASH_SOURCE:-$ 0")
Echo 'Der absolute Weg ist' $ path ist
Echo '------------------------------'
Echo 'Der Verzeichnispfad ist' $ dir_path

In diesem Fall benötigen wir zunächst den Pfad des aktuellen Skripts und verwenden DirName, um den Verzeichnispfad der Skriptdatei zu erhalten. Sobald wir das haben, CD in den Ordner und drucken das Arbeitsverzeichnis. Um den vollständigen oder absoluten Pfad zu erhalten, fügen wir den Grundnamen der Skriptdatei an den Verzeichnispfad oder $ DIR_PATH hinzu.

Den Weg eines anderen Skripts abrufen (außer sich selbst)

In den vorherigen Beispielen haben wir die Absolut- und Verzeichnispfade der Skriptdatei selbst abgerufen. Was ist, wenn wir die absoluten und Verzeichnispfade einer anderen Datei als das Skript abrufen wollten, in dem wir arbeiten (außer sich selbst)?

Hier haben wir also eine neue Datei namens Skript2 erstellt.SH, und wir möchten die absoluten und Verzeichnispfade von script2 bekommen.Sch.

Im Skript.Sch:

Skript.Sch
#!/Bin/Bash
Path = $ (RealPath Script2.Sch)
Echo 'Der absolute Weg ist' $ path ist
Echo '-------------------------------'
Dir_path = $ (Dirname $ path)
Echo 'Der Verzeichnispfad ist' $ dpath

Eine der vorherigen Methoden sollte auch hier funktionieren. Hier verwenden wir jedoch den relativen Pfad von Skript2.SH, um den absoluten Pfad abzurufen.

Den Weg eines Befehls abrufen

Jetzt können Sie das Absolute und die Verzeichnispfade aller gewünschten Skripte und die von Befehlen erhalten. Nehmen wir für einen Moment an, dass wir die absoluten und Verzeichnispfade des Befehls ls erhalten wollen. Wir würden schreiben:

Skript.Sch
#!/Bin/Bash
Path = $ (welches LS)
Echo 'Der absolute Weg ist' $ path ist
Echo '-------------------------------'
Dir_path = $ (Dirname $ path)
Echo 'Der Verzeichnispfad ist' $ dir_path

Ein Pfad ist eine Adresse, mit der eine Datei oder ein Ordner lokalisiert werden. Ein absoluter Pfad ist eine vollständige Adresse oder ein vollständiger Ort, so dass Sie die gewünschte Datei abrufen können. Andererseits wird ein relativer Weg in Bezug auf das aktuelle Arbeitsverzeichnis bestimmt. In Bash gibt es eine Reihe von Möglichkeiten, um die vollständige Adresse eines Skripts abzurufen. Insbesondere können wir Realpath, Readlink verwenden oder sogar unser benutzerdefiniertes kleines Skript erstellen. Wenn wir den Verzeichnispfad kennenlernen möchten, können wir den Befehl DirName in unserem Bash -Skript verwenden, um unseren Verzeichnispfad abzurufen. Es ist ziemlich einfach, die vollständige Adresse mit einer relativen Adresse zu erhalten.

Glückliche Codierung!