Wie kann ich das aktuelle Arbeitsverzeichnis abrufen? [duplizieren]

Diese Frage hat hier bereits Antworten :

Kommentare

  • Verwandte Themen: Abrufen der Quellverzeichnis eines Bash-Skripts innerhalb von
  • Dies ist kein Duplikat der Frage, für die es derzeit als eine markiert ist. Die beiden Fragen sollten zumindest anhand ihrer Titel (sowie ihrer Antworten) verglichen werden. Dass die Antwort auf diese Frage bereits von einer anderen beantwortet wird, ist oder sollte irrelevant sein.
  • @KennyEvitt Tatsächlich ist einer der Hauptgründe, warum wir schließen, genau, dass eine Antwort vorliegt wurde woanders gegeben. Tatsächlich ist die Hauptfrage hier tatsächlich, wie die Ausgabe eines Befehls einer Variablen zugewiesen werden kann, die vom Betrüger abgedeckt wird. Ich habe auch die Antwort auf diesen speziellen Fall gegeben, damit alle Grundlagen abgedeckt sind. Es wäre nicht vorteilhaft, dies erneut zu öffnen.
  • @terdon Als verfügbare und für die gesamte Population von Unix-Linux-Benutzern & vorgesehene Ressource ist dies Eine wertvolle Frage, auch wenn der ursprüngliche Fragesteller wirklich nur eine Antwort brauchte, die bereits an anderer Stelle behandelt wurde. Ich denke, wenn überhaupt, sollte diese Frage so bearbeitet werden, dass sie besser zum Titel passt, und sie sollte erneut geöffnet werden, um keine weiteren Aktivitäten zuzulassen, aber um nicht zu implizieren, dass diese Frage schlecht '.
  • @KennyEvitt Das Schließen als Duplikat impliziert in keiner Weise, dass die Frage schlecht ist! Diese Frage wird hier für immer beantwortet bleiben. Wenn Sie wirklich wissen möchten, wie Sie das aktuelle Arbeitsverzeichnis erhalten, finden Sie hier Ihre Antwort. Wenn Sie nur wissen möchten, wie die Ausgabe eines Befehls in einer Variablen gespeichert wird, finden Sie die Antwort auch hier, indem Sie dem Link zum Betrüger folgen. In jedem Fall ist dies ' nicht wirklich etwas, was ich alleine tun sollte. Wenn Sie der Meinung sind, dass es wieder geöffnet werden sollte, eröffnen Sie bitte eine Diskussion über Unix & Linux Meta , wo solche Probleme gelöst werden sollten.

Antwort

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

$ echo $PWD /home/terdon 

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

PWD

Wird von der Shell und vom Dienstprogramm cd 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, muss die Shell PWD auf den Wert aus der Umgebung einstellen. 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 eine allgemeinere Antwort Sie können die Ausgabe eines Befehls in einer Variablen speichern, indem Sie den Befehl in $() oder ` ` (Backticks) einschließen:

var=$(command) 

oder

var=`command` 

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

Antwort

dir=$(pwd)

Dies ist portabler und wird der Backticks-Methode vorgezogen.

Mit $() können Sie die Befehle verschachteln

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

Kommentare

  • Wenn überhaupt, sind die Backtics tatsächlich portabler, da sie vor dem Format $() liegen.Möglicherweise gibt es noch einige Maschinen, auf denen Shells ausgeführt werden, die ' die neuere $() -Notation nicht unterstützen. Während beide von POSIX definiert werden, wird heute $() bevorzugt, da es sich um eine sauberere Syntax handelt, die weit verschachtelt werden kann ($(command1 $(command2))) Einfacher als die Backticks.

Antwort

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

dir=`pwd` 

Antwort

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:

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

Antwort

Der Wert des aktuellen Arbeitsverzeichnisses kann Sei anders. 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 Folgendes verwenden:

dir=$(/usr/bin/pwd) 

oder gemäß Kommentar:

dir=$(pwd -P) 

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

Kommentare

  • dir = $ (pwd -P) funktioniert auch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.