it-swarm.com.de

push / pop aktuelles Verzeichnis?

Gibt es mit bash eine Möglichkeit, das aktuelle Arbeitsverzeichnis zu pushen und abzulegen? Ich habe versucht, bash;cd dir; ./dostuff;exit; zu schreiben, aber das aktuelle Verzeichnis ist jetzt dir.

58
user3109

Es gibt pushd und popd

Bash speichert einen Verlauf der von Ihnen besuchten Verzeichnisse. Sie müssen nur danach fragen. Bash speichert den Verlauf in einem Stapel und verwaltet den Stapel mit den Befehlen pushd und popd.

Mehr zu lesen

Beispiel:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
85
Nifle

Das Aufrufen von bash startet eine neue Subshell, die eine eigene Eingabe hat. Keiner der anderen Befehle wird ausgeführt, bis er beendet wird. Wenn Sie die auszuführenden Befehle mit Parens umgeben, wird auch eine neue Subshell gestartet, die Befehle werden jedoch in dieser Subshell ausgeführt.

( cd dir ; ./dostuff )

Wenn Sie nicht mehrere Ebenen des Verzeichnisverlaufs benötigen, können Sie auch Folgendes tun:

cd foo
# do your stuff in foo
cd -

Im Vergleich zu pushd/popd hat dies den Nachteil, dass Sie bei einem Fehler von cd foo im falschen Verzeichnis mit cd - landen.

(Wahrscheinlich ist cd - außerhalb von Skripten praktischer. "Gehen wir zurück, wo ich gerade war.")

11
tuomassalo

Ich verwende einen Alias, um die Änderungen in meinem Verzeichnis zu verfolgen, sodass ich irgendwo auf 'cd' zurückkehren kann, wo ich 'cd' verwendet habe, oder auf zwei zurückkehren kann, indem ich 'cd ..' usw .;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'
4
cdp