Gibt es eine Möglichkeit, mit bash das aktuelle Arbeitsverzeichnis zu pushen und abzulegen? Ich habe versucht zu schreiben, bash;cd dir; ./dostuff;exit;
aber das aktuelle Verzeichnis ist jetzt dir
.
Gibt es eine Möglichkeit, mit bash das aktuelle Arbeitsverzeichnis zu pushen und abzulegen? Ich habe versucht zu schreiben, bash;cd dir; ./dostuff;exit;
aber das aktuelle Verzeichnis ist jetzt dir
.
Antworten:
Es gibt pushd
undpopd
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.
Beispiel:
$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Das Aufrufen bash
startet eine neue Subshell, die über eine eigene Eingabe verfügt. 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 cd foo
Sie im Falle eines Fehlers im falschen Verzeichnis mit landen cd -
.
(Ist wahrscheinlich cd -
praktischer außerhalb von Skripten. "Gehen wir zurück, wo ich gerade war.")
Ich verwende einen Alias, um die Änderungen in meinem Verzeichnis zu verfolgen, sodass ich irgendwo auf 'cd' zurückgreifen kann, wo ich 'cd' verwendet habe, oder auf zwei zurückgreifen 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'
..cd
robust genug? es sieht so aus, als würde es nur die letzten 10 Gegenstände vom Stapel entfernen.
pushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.