it-swarm.com.de

Wie kann ich das aktuelle Arbeitsverzeichnis abrufen?

Ich möchte ein Skript haben, das das aktuelle Arbeitsverzeichnis in eine Variable umwandelt. Der Abschnitt, der das Verzeichnis benötigt, sieht folgendermaßen aus: dir = pwd. Es wird nur pwd gedruckt. Wie bekomme ich das aktuelle Arbeitsverzeichnis in eine Variable?

205
Interesting...

Das ist nicht nötig, es ist bereits in einer Variablen:

$ echo $PWD
/home/terdon

Die Variable PWD ist definiert von POSIX und funktioniert auf allen POSIX-kompatiblen Shells:

PWD

Wird von der Shell und vom CD-Dienstprogramm festgelegt. In der Shell muss der Wert wie folgt aus der Umgebung initialisiert werden. Wenn ein Wert für PWD bei der Ausführung an die Shell in der Umgebung übergeben wird, ist der Wert ein absoluter Pfadname des aktuellen Arbeitsverzeichnisses, der nicht länger als {PATH_MAX} Bytes einschließlich des abschließenden Nullbytes ist und den Wert nicht enthält Bei allen Komponenten, die Punkt oder Punkt-Punkt sind, setzt die Shell PWD auf den Wert aus der Umgebung. Wenn andernfalls ein Wert für PWD bei der Ausführung an die Shell in der Umgebung übergeben wird, ist der Wert ein absoluter Pfadname des aktuellen Arbeitsverzeichnisses, und der Wert enthält keine Komponenten, die Punkt oder Punkt-Punkt sind ist nicht spezifiziert, ob die Shell PWD auf den Wert aus der Umgebung oder PWD auf den Pfadnamen setzt, der von pwd -P ausgegeben würde. Andernfalls setzt das Dienstprogramm sh PWD auf den Pfadnamen, der von pwd -P ausgegeben wird. In Fällen, in denen PWD auf den Wert aus der Umgebung festgelegt ist, kann der Wert Komponenten enthalten, die auf Dateien vom Typ symbolische Verknüpfung verweisen. In Fällen, in denen PWD auf den Pfadnamen festgelegt ist, der von pwd -P ausgegeben wird, ist der Wert von PWD, wenn im aktuellen Arbeitsverzeichnis oder in einem übergeordneten Verzeichnis dieses Verzeichnisses nicht genügend Berechtigungen vorhanden sind, um den Pfadnamen zu bestimmen nicht spezifiziert. Zuweisungen zu dieser Variablen können ignoriert werden. Wenn eine Anwendung den Wert von PWD festlegt oder aufhebt, ist das Verhalten der Dienstprogramme cd und pwd nicht angegeben.


Für die allgemeinere Antwort besteht die Möglichkeit, die Ausgabe eines Befehls in einer Variablen zu speichern, darin, den Befehl in $() oder ` ` (Backticks) einzuschließen:

var=$(command)

oder

var=`command`

Von beiden wird $() bevorzugt, da es einfacher ist, komplexe Befehle wie command0 $(command1 $(command2 $(command3))) zu erstellen.

305
terdon

dir=$(pwd)

Dies ist portabler und der Backticks-Methode vorzuziehen.

Mit $() können Sie die Befehle verschachteln

zB: mech_pwd=$(pwd; echo in $(hostname))

30
Govind Kailas

Sie können entweder die Umgebungsvariable $PWD Verwenden oder etwas schreiben wie:

dir=`pwd`
11
chrk

Sie müssen die Befehlssubstitution verwenden, um die Ausgabe des Befehls pwd in einer Variablen zu speichern. Bei der Befehlsersetzung können Backticks oder Dollarzeichen verwendet werden. So was:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
5

Der Wert des aktuellen Arbeitsverzeichnisses kann unterschiedlich sein. Wenn Sie symbolische Links verwendet haben, um das aktuelle Verzeichnis abzurufen, liefert pwd andere Ergebnisse als/usr/bin/pwd. Da Sie bash verwenden, würde ich verwenden:

dir=$(/usr/bin/pwd)

oder laut Kommentar:

dir=$(pwd -P)

da ich keine Anführungszeichen mag, da sie nicht nisten können.

1
Robert Jacobs