push / pop répertoire en cours?

66

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.


la source

Réponses:

91

Il y a pushdetpopd

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
Fusil
la source
1
Extrait du lienpushd 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

L'appel bashcommence 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 )
Ignacio Vazquez-Abrams
la source
1
Brillant! Inutile d'appuyer sur / pop lorsque vous souhaitez exécuter une commande dans un répertoire différent (par exemple, mettre à jour une dépendance), puis revenir au répertoire actuel.
Dan Dascalescu
12

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, cela a pour inconvénient que si vous cd fooéchouez, vous vous retrouvez dans le mauvais répertoire avec cd -.

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

Tuomassalo
la source
4

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'
cdp
la source
1
Pouvez-vous expliquer plus en détail ce que fait ce code?
bwDraco
C'est malin. J'ai des alias autour de mon pushd et popd pour faire certaines choses que j'aime. J'utilise la pile de répertoires tout le temps. Je déteste regarder les gens quelque part, puis défiler vers le bas pour rechercher le répertoire précédent à couper et coller. Je ne peux pas effectuer la majeure partie de mon travail dans mon répertoire personnel à cause des quotas; je dois donc utiliser le stockage en pool sur le réseau.
Michael Mathews
1
Le pseudonyme est-il ..cdassez robuste? il semble que cela ne supprime que les 10 derniers éléments de la pile.
reynoldsnlp