825 Stimmen

Wie kann ich das aktuelle Arbeitsverzeichnis auf das Verzeichnis des Skripts in der Bash setzen?

Ich schreibe ein Bash-Skript. Das aktuelle Arbeitsverzeichnis muss immer das Verzeichnis sein, in dem sich das Skript befindet.

Das Standardverhalten ist, dass das aktuelle Arbeitsverzeichnis im Skript dasjenige der Shell ist, von der aus ich es ausführe, aber ich möchte dieses Verhalten nicht.

17voto

Andrew Theken Punkte 3261

Es gibt eine Vielzahl von richtig Antworten hier, aber eine, die für mich nützlicher ist (um sicherzustellen, dass die relativen Pfade eines Skripts vorhersehbar bleiben/funktionieren), ist die Verwendung von pushd/popd:

pushd "$(dirname ${BASH_SOURCE:0})"
trap popd EXIT

# ./xyz, etc...

Dadurch wird das Verzeichnis der Quelldatei auf einen Navigationsstapel verschoben, wodurch das Arbeitsverzeichnis geändert wird, aber dann, wenn das Skript beendet wird (aus welchem Grund auch immer, einschließlich Fehlern), wird die trap wird laufen popd und stellt das aktuelle Arbeitsverzeichnis wieder her, bevor es ausgeführt wurde. Wenn das Skript cd und dann fehlschlagen, könnte Ihr Terminal nach dem Ende der Ausführung in einem unvorhersehbaren Zustand sein - die Falle verhindert dies.

12voto

Amardeep AC9MF Punkte 17715

Dieses Skript scheint bei mir zu funktionieren:

#!/bin/bash
mypath=`realpath $0`
cd `dirname $mypath`
pwd

Die Befehlszeile pwd gibt den Speicherort des Skripts als aktuelles Arbeitsverzeichnis aus, unabhängig davon, von wo aus ich es ausführe.

4voto

Robert Hu Punkte 81

Ich nehme das und es funktioniert.

#!/bin/bash
cd "$(dirname "$0")"
CUR_DIR=$(pwd)

2voto

rodnower Punkte 1325

Ermitteln Sie den tatsächlichen Pfad zu Ihrem Skript

if [ -L $0 ] ; then
    ME=$(readlink $0)
else
    ME=$0
fi
DIR=$(dirname $ME)

(Dies ist die Antwort auf dieselbe Frage, die ich hier gestellt habe: Ermitteln des Namens des Verzeichnisses, in dem ein Skript ausgeführt wird )

1voto

cd "`dirname $(readlink -f ${0})`"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X