web-dev-qa-db-fra.com

répertoire push / pop en cours?

Avec bash, existe-t-il un moyen d’afficher et de supprimer le répertoire de travail actuel? J'ai essayé d'écrire bash;cd dir; ./dostuff;exit; mais le répertoire actuel est maintenant dir.

58
user3109

Il y a pushd et popd

Bash gardera un historique des répertoires que vous visitez, il vous suffit de demander. Bash stocke l'historique dans une pile et utilise les commandes pushd et popd pour gérer la pile.

Plus à lire

Exemple:

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

L'appel de bash démarre un nouveau sous-shell, qui a sa propre entrée; aucune des autres commandes ne s'exécutera jusqu'à ce qu'elle se termine. Le fait d'entourer les commandes à exécuter avec des parens démarrera également un nouveau sous-shell, mais les commandes qu'il contient seront exécutées.

( cd dir ; ./dostuff )
28

Si vous n'avez pas besoin de plusieurs niveaux d'historique de répertoires, vous pouvez également effectuer les tâches suivantes:

cd foo
# do your stuff in foo
cd -

Comparé à pushd/popd, le désavantage est que si cd foo échoue, vous vous retrouvez dans le mauvais répertoire avec cd -.

(Probablement que cd - est plus pratique en dehors des scripts. "Revenons où je venais.")

11
tuomassalo

J'utilise alias pour suivre les modifications de mon répertoire; je peux donc "cd" quelque part, je peux simplement revenir à l'endroit où j'utilisais "cd.", Ou deux en utilisant "cd ..", etc.

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