247 Stimmen

Wechseln des aktuellen Verzeichnisses aus einem Bash-Skript

Ist es möglich, das aktuelle Verzeichnis aus einem Skript heraus zu wechseln?

Ich möchte ein Dienstprogramm für die Verzeichnisnavigation in der Bash erstellen. Ich habe ein Testskript erstellt, das wie das folgende aussieht:

#!/bin/bash
cd /home/artemb

Wenn ich das Skript über die Bash-Shell ausführe, ändert sich das aktuelle Verzeichnis nicht. Ist es überhaupt möglich, das aktuelle Shell-Verzeichnis von einem Skript aus zu ändern?

2 Stimmen

Nur ein Verbesserungsvorschlag: Wenn Sie pushd (möglicherweise umgeleitet zu >/dev/null um seine Ausgabe zu unterdrücken) anstelle von cd können Sie später in das vorherige Verzeichnis zurückkehren mit popd .

0 Stimmen

24voto

philippe lhardy Punkte 2964

Wenn Sie ein Bash-Skript ausführen, wirkt es auf seine aktuelle Umgebung oder auf die seiner Kinder, niemals auf die übergeordnete Umgebung.

Wenn das Ziel ist, den Befehl : goto.sh /home/test Dann arbeiten Sie interaktiv in /home/test, indem Sie eine interaktive Bash-Subshell innerhalb Ihres Skripts ausführen:

#!/bin/bash
cd $1
exec bash

Auf diese Weise befinden Sie sich in /home/test, bis Sie diese Shell verlassen ( exit oder Strg+C ).

20voto

seb Punkte 1628

Mit pushd wird das aktuelle Verzeichnis auf den Verzeichnisstapel geschoben und in das angegebene Verzeichnis gewechselt, popd holt sich das Verzeichnis oben auf dem Stapel und wechselt dann dorthin.

pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null

6voto

Alberto Corella Punkte 31

Fügen Sie unter der cd-Zeile in Ihrem Shellscript folgendes ein:

exec $SHELL

6voto

ThangTD Punkte 1446

Gehen Sie einfach zu

yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor

und fügen Sie diesen Code neben der letzten Zeile ein:

alias yourcommand="cd /the_path_you_wish"

Verlassen Sie dann den Editor.

Dann tippen Sie:

source ~/.bashrc or source ~/.bash_profile on MAC.

können Sie jetzt verwenden: IhrBefehl im Terminal

3voto

Shivam Anand Punkte 423

Dies ist eine vereinfachte Zusammenstellung der obigen Antwort.
Erstellen einer Shell-Datei shellfile.sh Im Skript ändern Sie Ihr Verzeichnis innerhalb einer Funktion

#!/bin/bash

cd folder1/folder2/

Führen Sie nun das Skript mit . vor ihm.
. verwendet den aktuellen Thread/die aktuelle Sitzung zur Ausführung des Skripts.

. shellfile.sh

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