Utilisation des commandes pushd et popd sous Linux

Naviguer dans des structures de répertoires complexes dans un terminal Linux peut s’avérer fastidieux, en particulier lors de l’administration du système ou de l’écriture de scripts. Si cd (changer de répertoire) est la commande de référence pour la navigation dans les répertoires, elle ne permet pas de gérer une pile de répertoires – une fonctionnalité que pushd et popd apportent à la table.

Cet article propose une analyse approfondie des commandes pushd et popd, vous montrant comment rationaliser la navigation dans les répertoires et rendre vos flux de travail sur le terminal plus efficaces.

Que sont les commandes pushd et popd ?

  • pushd (push directory) enregistre votre répertoire actuel dans une pile, puis passe à un nouveau répertoire.

  • popd (pop directory) supprime le répertoire supérieur de la pile et vous ramène au répertoire précédent.

Ces commandes font partie du mécanisme de pile de répertoires disponible dans bash, zsh et d’autres shells modernes.

Quand les utiliser

les commandespushd et popd sont très utiles dans les cas suivants :

  • Vous vous déplacez fréquemment entre deux ou plusieurs répertoires.

  • Vous écrivez des scripts shell qui ont besoin de changer temporairement de répertoire.

  • Vous voulez éviter de polluer votre shell avec des commandes cd inutiles et maintenir le contexte.

Utilisation de base

1. commande pushd

pushd /path/to/target
  • Repousse le répertoire actuel sur la pile.

  • Change le répertoire en /chemin/vers/cible.

exemple :

cd ~
pushd /var/www/html

Vous êtes maintenant dans /var/www/html, et votre répertoire personnel ~ est stocké sur la pile.

2. commande popd

popd
  • Retire le répertoire supérieur de la pile.

  • Vous ramène au répertoire précédent.

Suite de l’exemple ci-dessus :

popd

Vous êtes de retour dans ~.

Travailler avec la pile de répertoires

Utilisez dirs pour afficher l’état actuel de la pile de répertoires :

dirs -v

Exemple de sortie :

0 /var/www/html
1 /home/user
  • L’indice 0 correspond au répertoire actuel.

  • Les indices supérieurs représentent les répertoires précédents.

Repousser le répertoire courant sans changer de répertoire

Vous pouvez utiliser :

pushd.

pour pousser le répertoire courant vers la pile sans changer de répertoire.

Exemples réels

Exemple 1 : Saut entre les répertoires Source et Build

pushd ~/projets/myapp/src
# Effectuer des modifications
pushd../build
make && make install
popd # Retour à src
popd # Retour au répertoire d'origine

Efficace pour un développement itératif sans commandes cd répétitives.

Exemple 2 : Envelopper dans un script Shell

Voici un script qui construit du code dans un répertoire temporaire et revient proprement :

#!/bin/bash
pushd /tmp/build-env || exit 1
# Configure and build
cmake ~/projects/myproject
make -j$(nproc)
popd

Si le script échoue dans /tmp/build-env, vous revenez toujours à votre emplacement d’origine.

Conseils et bonnes pratiques

Utilisez pushd plutôt que cd dans les scripts

Cela rend vos scripts plus faciles à maintenir, en particulier lorsque des erreurs surviennent – vous pouvez revenir au répertoire d’origine en toute sécurité.

Combinez avec dirs -v pour le débogage de la pile

Lorsque vous travaillez avec plusieurs appels pushd, dirs -v vous aide à retracer l’historique de votre navigation.

Utiliser des index avec popd

Vous pouvez supprimer un répertoire spécifique de la pile :

popd 1

Supprime le répertoire à l’index 1 (pas nécessairement le répertoire courant).

Pièges courants

  • Stack Overflow (pas le site 😄) : L’utilisation excessive de pushd sans appels popd correspondants peut gonfler votre pile, conduisant à un état de répertoire confus.

  • Pas disponible partout: pushd et popd sont intégrés dans bash, zsh, et autres shells similaires – ils peuvent ne pas être disponibles dans des shells minimaux comme sh.

  • Pas de persistance: La pile de répertoires est basée sur les sessions. Lorsque votre session de terminal se termine, la pile est réinitialisée.

Alias pour les utilisateurs expérimentés

Dans votre .bashrc ou.zshrc, ajoutez :

alias pd='pushd'
alias pp='popd'
alias dl='dirs -v'

Cela permet de réduire le nombre de frappes et d’améliorer la productivité.