enlever ou effacer la pile de chemins popd / pushd

39

Après pushdtrop de fois, je veux effacer toute la pile de chemins.

Comment pourrais-je popdtous les éléments de la pile?

Je voudrais popdsans avoir besoin de savoir combien sont dans la pile?

Le manuel de Bash ne semble pas couvrir cela .

Pourquoi ai-je besoin de savoir cela? Je suis fastidieux et de nettoyer la pile.

chrisjlee
la source
1
BTW, le manuel complet de bash est terminé sur gnu.org. Si vous utilisez la version tout sur une page, il sera peut-être plus facile d'y trouver des éléments.
Jw013
Ah souhaiter google indexé celui-là. Merci @ jw013
chrisjlee

Réponses:

47

dirs -c est ce que vous recherchez.

jw013
la source
1
cela ne vide pas la pile, mais ne restaure pas le répertoire de travail à partir du bas de la pile
Eliran Malka
8

Pour vider la pile et restaurer le répertoire de travail à partir du bas de la pile, soit:

  • récupérer ce répertoire à partir de dirs, changer dans ce répertoire, puis effacer la pile:

    cd "$(dirs -l -0)" && dirs -c

    L' -loption ici listera les chemins complets, pour s'assurer que nous n'échouons pas si nous essayons d' cdentrer ~, et -0récupère la première entrée à partir du bas de la pile.

    @ jw013 a suggéré de rendre cette commande plus robuste en évitant les extensions de chemin:

    pushd -0 && dirs -c
  • ou, popdjusqu'à ce que vous rencontriez une erreur (qui est le statut d'un popdappel lorsque la pile de répertoires est vide):

    while (( $? == 0 )); do popd; done
Eliran Malka
la source
1
La première méthode est exactement ce que je voulais. La seconde ne fonctionnait pas dans mon cas puisque j'avais appelé pushdplusieurs fois, puis que j'avais supprimé l'un des répertoires du milieu, puis que popdj'échouais lorsque j'essayais de me dérouler. Je devais sauter par-dessus toutes les choses encombrées au milieu pour revenir à mon point de départ.
Chuck Wilbur
right @ChuckWilbur - si vous avez brouillé la pile de répertoires, popdcela ne vous sauvera pas :)
Eliran Malka
Il vaut mieux au pushd -0lieu de cd "$(dirs ...)".
jw013
@ jw013 comment alors? ça gâcherait encore plus la pile de dir (ce que nous essayons de vider ici ..)
Eliran Malka
1
cd "$(...)"fonctionne dans 90%, probablement même 99% des cas d'utilisation, mais avec pushd -0vous pouvez dire en toute confiance 100%. Il y a tellement de pièges potentiels et de cas extrêmes associés à l'expansion des chemins de fichiers / répertoires dans le shell que la chose la plus robuste à faire est simplement de l'éviter, ce qui pushd -0est très concis. Il n'y a aucune chance d'être attrapé par un bogue avec un cas bizarre si vous ne prenez jamais le risque. Si vous souhaitez en savoir plus sur les maux de tête possibles liés aux noms de fichier / chemin Unix, un bon point de départ est mywiki.wooledge.org/ParsingLs
jw013