Après pushd
trop de fois, je veux effacer toute la pile de chemins.
Comment pourrais-je popd
tous les éléments de la pile?
Je voudrais popd
sans 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.
Réponses:
dirs -c
est ce que vous recherchez.la source
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:L'
-l
option ici listera les chemins complets, pour s'assurer que nous n'échouons pas si nous essayons d'cd
entrer~
, et-0
ré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:
ou,
popd
jusqu'à ce que vous rencontriez une erreur (qui est le statut d'unpopd
appel lorsque la pile de répertoires est vide):la source
pushd
plusieurs fois, puis que j'avais supprimé l'un des répertoires du milieu, puis quepopd
j'é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.popd
cela ne vous sauvera pas :)pushd -0
lieu decd "$(dirs ...)"
.cd "$(...)"
fonctionne dans 90%, probablement même 99% des cas d'utilisation, mais avecpushd -0
vous 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 quipushd -0
est 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