Utiliser popd sans supprimer la dernière valeur

8

Comment puis-je obtenir le comportement d'utilisation popdsans vraiment faire sauter le dernier répertoire de la pile? En d'autres termes, je veux revenir au dernier répertoire que j'ai défini pushd, mais je veux qu'il reste en haut de la pile pour que le prochain popdm'emmène dans ce même répertoire (qui serait toujours en haut de la pile) à nouveau.

Freedom_Ben
la source
Le "cd -" ne fonctionnera-t-il pas? Si je comprends bien, la séquence est: "pushd d1; pushd d2; pushd d3;" et maintenant pour revenir à d2, non?
tpb261
cd -fonctionne, mais seulement si vous n’avez cdnulle part ailleurs avant d’être prêt popd. Je rebondis habituellement à quelques endroits avant d'être prêt à revenir
Freedom_Ben
C'est évident ... mais d'une manière ou d'une autre, j'ai raté la partie implicite du "rebond" de votre question.
tpb261

Réponses:

2

Que diriez-vous: cd "$(dirs -l -p | sed -n '2{p;q}')"

glenn jackman
la source
Super merci! C'est du bash-fu si je l'ai déjà vu. J'ai alias cette commande pour peekd(sorte de C ++ STL-ish et facile à retenir pour moi), donc je peux simplement taper peekdpour obtenir le comportement. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@Freedom_Ben Cela peut être simplifié pourcd "$(dirs +1)"
Gilles 'SO- arrête d'être méchant'
@Gilles Quand j'essaye de faire ceci, il indique "bash: cd <mon répertoire>: Aucun fichier ou répertoire" bien qu'il existe clairement. Savez-vous pourquoi c'est? Le cd n'interprète-t-il pas correctement <mon répertoire> comme un chemin? D'après le message d'erreur, il semble que cela devrait fonctionner. c'est-à-dire que <mon répertoire> semble correct et si je tape simplement "cd <mon répertoire>", cela fonctionne.
nukeguy
1
@nukeguy <my directory>Commence par un tilde? Mon commentaire ci-dessus manquait l' -loption de lister le répertoire complet plutôt que d'utiliser l' ~abréviation. Ça devrait êtrecd "(dirs -l +1)"
Gilles 'SO- arrête d'être méchant'
@Gilles Oui! C'est exactement ce que je cherchais, merci! Vous devriez peut-être publier votre commentaire comme une solution distincte - à mon avis, c'est l'option la plus générale et la plus utile sur ce fil.
nukeguy
10

pushd sans arguments permute les deux premières entrées de la pile, vous permettant ainsi de faire des allers-retours entre elles.

À partir de d1, exécutez pushd d2 ajoute d1 et d2 à la pile et vous laisse en d2. Exécutez à nouveau pushd sans argument et vous êtes de retour en d1 avec d1 et d2 inversés sur la pile.

Stephen Davison
la source
6

Si j'ai bien compris, vous pourriez pushd .juste après popdpour que le poprépertoire ed soit à nouveau placé en haut de la pile.

Eric Carvalho
la source
Wow, c'est une solution très simple et élégante. Merci!
Freedom_Ben