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.