push / pop bieżący katalog?

66

Czy dzięki bash istnieje sposób na wypchnięcie i usunięcie bieżącego katalogu roboczego? Próbowałem pisać, bash;cd dir; ./dostuff;exit;ale bieżący katalog jest teraz dir.


źródło

Odpowiedzi:

91

Jest pushdipopd

Bash zachowa historię odwiedzanych katalogów, po prostu musisz zapytać. Bash przechowuje historię w stosie i używa poleceń pushd i popd do zarządzania stosem.

Więcej do przeczytania

Przykład:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Nifle
źródło
1
Fragment linkupushd 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.
Master Chief
31

Wywołanie bashuruchamia nową podpowłokę, która ma własne dane wejściowe; żadne z pozostałych poleceń nie uruchomi się, dopóki nie zakończy działania. Otaczanie poleceń uruchamianych za pomocą parens również uruchomi nową podpowłokę, ale uruchomi w niej polecenia.

( cd dir ; ./dostuff )
Ignacio Vazquez-Abrams
źródło
1
Znakomity! Nie ma potrzeby naciskania / popowania, gdy zamierza się po prostu uruchomić polecenie w innym katalogu (np. Zaktualizować zależność), a następnie wrócić do bieżącego.
Dan Dascalescu
12

Jeśli nie potrzebujesz wielu poziomów historii katalogów, możesz także:

cd foo
# do your stuff in foo
cd -

W porównaniu do pushd/ popdma to tę wadę, że jeśli cd foozawiedzie, trafisz do niewłaściwego katalogu z cd -.

(Prawdopodobnie cd -jest to bardziej przydatne poza skryptami. „Wróćmy tam, gdzie właśnie byłem”.)

tuomassalo
źródło
4

Używam aliasu do śledzenia zmian w moich katalogach, więc do „cd” gdzieś mogę wrócić do miejsca, w którym korzystałem z „cd.”, Lub cofnąć dwa, używając „cd ..” itp .;

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'
cdp
źródło
1
Czy możesz wyjaśnić bardziej szczegółowo, co robi ten kod?
bwDraco
To sprytne. Mam aliasy wokół moich pushd i popd, aby robić rzeczy, które lubię. Cały czas używam stosu katalogów. Nienawidzę patrzeć gdzieś na płytach CD, a potem przewijać wstecz, szukając poprzedniego katalogu do wycięcia i wklejenia. Większość pracy nie mogę wykonać w katalogu domowym z powodu przydziałów, więc muszę korzystać z puli pamięci w sieci.
Michael Mathews,
1
Czy alias jest ..cdwystarczająco solidny? wygląda na to, że usuwa tylko 10 ostatnich przedmiotów ze stosu.
reynoldsnlp