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.

Primož Kralj
quelle
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
Jordanm
quelle
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.

derobert
quelle
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