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.

linux  bash 

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

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 )

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”.)


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'

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.