GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie konvertiert man .. in Pfadnamen in absolute Namen in einem Bash-Skript?

Versuchen Sie:

ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)

Was Sie suchen, ist readlink :

absolute_path=$(readlink -m /home/nohsib/dvc/../bop)

Bitte beachten: Sie müssen GNUs readlink verwenden -Implementierung, die die Option "-m" anbietet. BSDs readlink zum Beispiel nicht.


Wenn Sie dies tun möchten, ohne Symlinks zu folgen, versuchen Sie es mit realpath mit Option -s :

$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop

Beachten Sie das mit realpath , müssen normalerweise alle bis auf die letzte Komponente vorhanden sein. Damit das obige funktioniert, muss also alles im Dateisystem vorhanden sein:

/home
/home/nohsib
/home/nohsib/dvc

Sie können diese Anforderung jedoch mit -m umgehen Option.

$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop

(Beachten Sie realpath ist nicht auf allen Systemen verfügbar, insbesondere auf älteren Nicht-Debian-Systemen. Für diejenigen, die mit eingebettetem Linux arbeiten, leider Busybox realpath unterstützt nicht den -s oder -m Schalter.)


Ein Problem bei der Verwendung von :

ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)

ist, dass, wenn ${possibleDirectory} nicht existiert, ABSOLUTE_PATH dann auf das aktuelle Verzeichnis gesetzt wird. Was Sie wahrscheinlich NICHT wollen oder erwarten.

Ich denke, dass die Verwendung dieser Version im Allgemeinen wünschenswerter sein kann:

ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)

Wenn ${possibleDirectory} aufgrund fehlender Verzeichniszugriffsberechtigungen nicht existiert oder nicht zugänglich ist, enthält ABSOLUTE_PATH die leere Zeichenfolge.

Der Vorteil davon ist, dass Sie dann je nach den Umständen auf die leere Zeichenfolge testen oder sie natürlich fehlschlagen lassen können. Das standardmäßige Verwenden des aktuellen Verzeichnisses im Falle eines fehlgeschlagenen 'cd'-Befehls kann zu sehr unerwarteten und möglicherweise katastrophalen Ergebnissen führen (z. B. rm -rf "$ABSOLUTE_PATH" )


Linux
  1. Wie kann man Bash-Skripte in Vim hervorheben?

  2. Wie übergebe ich Parameter an ein Bash-Skript?

  3. So ersetzen Sie Leerzeichen in Dateinamen mit einem Bash-Skript

  4. Wie erhalte ich den vollständigen Pfad einer Datei?

  5. Fügen Sie dem Pfad ein Bash-Skript hinzu

So schreiben Sie ein Bash-Skript mit Beispielen

So führen Sie ein Bash-Skript aus

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?

Wie normalisiert man einen Dateipfad in Bash?

Wie setze ich im Python-Skript PYTHONPATH?

So schließen Sie eine Datei in ein Bash-Shell-Skript ein