Verzeichnis abrufen, aus dem das Skript aufgerufen wurde


10

Ich habe ein Skript doSmthin /usr/bin. Ist es möglich, das Verzeichnis abzurufen und auszudrucken, aus dem das Skript aufgerufen wurde ?

Also wenn ich doSmthvon /home/meder Ausgabe anrufe wird /home/me.


In welcher Sprache?
Jordanm

Uhh, in Bash :)
Primož Kralj

Antworten:


11

Wenn Sie einen Befehl in der Shell aufrufen, erbt der neue Prozess das Arbeitsverzeichnis des übergeordneten Elements. Hier sind zwei Möglichkeiten, um das Arbeitsverzeichnis zu erhalten:

echo "$PWD" # variable
pwd         # builtin command

1

Mit "Verzeichnis, aus dem es aufgerufen wurde" meinen Sie anscheinend das Arbeitsverzeichnis. Sie können dies innerhalb des Skripts mit z. B. ändern cd, aber bevor Sie dies tun, pwdwird es ausgedruckt. Es wird wahrscheinlich auch in der Variablen sein$PWD

Wenn Sie das ursprüngliche Arbeitsverzeichnis nach dem Ändern benötigen, speichern Sie es einfach oben in Ihrem Skript (bevor Sie es ändern).

#!/bin/bash
initial_wd=`pwd`

# ... do a lot of stuff ...
# ⋮

cd "$initial_wd"

Wenn Sie dies verwenden, um zu dem Verzeichnis zurückzukehren, in dem Sie begonnen haben, siehe auch pushdund popd.


3
In Bash gibt es auch "$ OLDPWD".
Jordanm

@ Jordanm In der Tat gibt es, aber das wird nicht unbedingt das anfängliche Arbeitsverzeichnis sein (z. B. wenn Sie cdzweimal verwendet haben)
derobert

$ OLDPWD ist was ich brauche; Ich führe Bash-Skripte über die CMD-Eingabeaufforderung unter Win7 aus. Dies war die Umgebungsvariable, die das Verzeichnis enthielt, in dem ich das Skript ausführte. Prost
Darren Bishop
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.