GNU/Linux >> Tutoriels Linux >  >> Linux

Naviguer dans le shell Bash avec pushd et popd

Le poussé et popd Les commandes sont des fonctionnalités intégrées du shell Bash pour vous aider à "marquer" des répertoires pour une navigation rapide entre les emplacements de votre disque dur. Vous pensez peut-être déjà que le terminal est un moyen incroyablement rapide de naviguer sur votre ordinateur ; en quelques pressions de touches, vous pouvez aller n'importe où sur votre disque dur, votre stockage connecté ou votre partage réseau. Mais cette vitesse peut s'effondrer lorsque vous vous retrouvez à faire des allers-retours entre les répertoires ou lorsque vous êtes "perdu" dans votre système de fichiers. Ce sont précisément les problèmes pushd et popd peut vous aider à résoudre.

pousser

Dans sa forme la plus basique, pushd ressemble beaucoup à cd . Il vous emmène d'un répertoire à un autre. Supposons que vous ayez un répertoire appelé one , qui contient un sous-répertoire appelé deux , qui contient un sous-répertoire appelé trois , etc. Si votre répertoire de travail actuel est un , vous pouvez alors passer à deux ou trois ou n'importe où avec le cd commande :

$ pwd
un
$ cd deux/trois
$ pwd
trois

Vous pouvez faire la même chose avec pushd :

$ pwd
un
$ pushd deux/trois
~/un/deux/trois ~/un
$ pwd
trois

Le résultat final de pushd est identique à cd , mais il existe un résultat intermédiaire supplémentaire :pushd fait écho à votre répertoire de destination et à votre point d'origine. Ceci est votre pile de répertoires , et c'est ce qui fait pushd uniques.

Piles

Une pile, dans la terminologie informatique, fait référence à une collection d'éléments. Dans le cadre de cette commande, les éléments sont les répertoires que vous avez récemment visités en utilisant le pushd commande. Vous pouvez le considérer comme un historique ou un fil d'Ariane.

Vous pouvez vous déplacer partout dans votre système de fichiers avec pushd; à chaque fois, vos emplacements précédents et nouveaux sont ajoutés à la pile :

$ pushd quatre
~/un/deux/trois/quatre ~/un/deux/trois ~/un
$ pushd cinq
~/un/deux/trois/quatre/ cinq ~/un/deux/trois/quatre ~/un/deux/trois ~/un

Une fois que vous avez créé une pile, vous pouvez l'utiliser comme une collection de signets ou de points de passage rapides. Par exemple, supposons que pendant une session, vous fassiez beaucoup de travail dans le ~/un/deux/trois/quatre/cinq structure de répertoires de cet exemple. Vous savez que vous avez été un récemment, mais vous ne vous souvenez plus où il se trouve dans votre pushd pile. Vous pouvez voir votre pile avec le +0 (c'est un signe plus suivi d'un zéro) argument, qui indique pushd de ne pas changer de répertoire dans votre pile, mais invite également pushd pour faire écho à votre pile actuelle :

$ pushd +0
~/un/deux/trois/quatre ~/un/deux/trois ~/un ~/un/deux/trois/quatre/cinq

Alternativement, vous pouvez afficher la pile avec les répertoires commande, et vous pouvez voir le numéro d'index pour chaque répertoire en utilisant la -v choix :

$ dirs -v
0  ~/un/deux/trois/quatre
1  ~/un/deux/trois
2  ~/un
3  ~/un/ deux/trois/quatre/cinq

La première entrée de votre pile est votre emplacement actuel. Vous pouvez le confirmer avec pwd comme d'habitude :

$ pwd
~/un/deux/trois/quatre

Commençant à 0 (votre emplacement actuel et la première entrée de votre pile), la seconde élément dans votre pile est ~/one , qui est votre destination souhaitée. Vous pouvez avancer dans votre pile en utilisant le +2 choix :

$ pushd +2
~/un ~/un/deux/trois/quatre/cinq ~/un/deux/trois/quatre ~/un/deux/trois
$ pwd
~/un

Cela change votre répertoire de travail en ~/one et a également déplacé la pile de sorte que votre nouvel emplacement soit à l'avant.

Vous pouvez également reculer dans votre pile. Par exemple, pour accéder rapidement à ~/un/deux/trois étant donné l'exemple de sortie, vous pouvez reculer d'un, en gardant à l'esprit que pushd commence par 0 :

$ pushd -0
~/un/deux/trois ~/un ~/un/deux/trois/quatre/cinq ~/un/deux/trois/quatre

Ajout à la pile

Vous pouvez continuer à naviguer dans votre pile de cette manière, et elle restera une liste statique de vos répertoires récemment visités. Si vous souhaitez ajouter un répertoire, indiquez simplement le chemin du répertoire. Si un répertoire est nouveau dans la pile, il est ajouté à la liste comme prévu :

$ pushd /tmp
/tmp ~/un/deux/trois ~/un ~/un/deux/trois/quatre/cinq ~/un/deux/trois/quatre

Mais s'il existe déjà dans la pile, il est ajouté une seconde fois :

$ pushd ~/un
~/un /tmp ~/un/deux/trois ~/un ~/un/deux/trois/quatre/cinq ~/un/deux/trois/quatre

Bien que la pile soit souvent utilisée comme une liste de répertoires auxquels vous souhaitez accéder rapidement, il s'agit en réalité d'un véritable historique de vos déplacements. Si vous ne voulez pas qu'un répertoire soit ajouté de manière redondante à la pile, vous devez utiliser le +N et -N notation.

Supprimer des répertoires de la pile

Votre pile n'est évidemment pas immuable. Vous pouvez l'ajouter avec pushd ou en supprimer des éléments avec popd .

Par exemple, supposons que vous venez d'utiliser pushd pour ajouter ~/un à votre pile, faisant ~/un votre répertoire de travail actuel. Pour supprimer le premier élément (ou "zéro", si vous préférez) :

$ pwd
~/un
$ popd +0
/tmp ~/un/deux/trois ~/un ~/un/deux/trois/quatre/cinq ~/un /deux/trois/quatre
$ pwd
~/un

Bien sûr, vous pouvez supprimer n'importe quel élément, en commençant votre décompte à 0 :

$ pwd ~/un
$ popd +2
/tmp ~/un/deux/trois ~/un/deux/trois/quatre/cinq ~/un/deux/trois/quatre
$ pwd ~/un

Vous pouvez également utiliser popd à l'arrière de votre pile, en commençant à nouveau par 0. Par exemple, pour supprimer le répertoire final de votre pile :

$ popd -0
/tmp ~/un/deux/trois ~/un/deux/trois/quatre/cinq

Lorsqu'il est utilisé comme ceci, popd ne change pas votre répertoire de travail. Il manipule uniquement votre pile.

Le comportement par défaut de popd , sans arguments, consiste à supprimer le premier élément (zéro) de votre pile et à faire de l'élément suivant votre répertoire de travail actuel.

Ceci est particulièrement utile en tant que commande de changement rapide, lorsque vous travaillez, par exemple, dans deux répertoires différents et que vous avez juste besoin de vous éloigner un instant vers un autre emplacement. Vous n'avez pas à penser à votre pile de répertoires si vous n'avez pas besoin d'un historique élaboré :

$ pwd
~/un
$ pushd ~/un/deux/trois/quatre/cinq
$ popd
$ pwd
~/un

Vous n'êtes pas non plus obligé d'utiliser pushd et popd en succession rapide. Si vous utilisez pushd pour visiter un endroit différent, puis être distrait pendant trois heures à la recherche d'un bogue ou à la recherche, vous trouverez votre pile de répertoires attendant patiemment (sauf si vous avez terminé votre session de terminal) :

$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr} ; sleep 2001
[...]
$ popd
$ pwd
~/one

Pushd et popd dans le monde réel

Le poussé et popd les commandes sont étonnamment utiles. Une fois que vous les aurez apprises, vous trouverez des excuses pour les utiliser à bon escient et vous vous familiariserez avec le concept de la pile de répertoires. Se familiariser avec pushd c'est ce qui m'a aidé à comprendre git stash , qui n'a aucun rapport avec pushd mais similaire dans l'intangibilité conceptuelle.

Utiliser pushd et popd dans les scripts shell peut être tentant, mais en général, il est probablement préférable de les éviter. Ils ne sont pas portables en dehors de Bash et Zsh, et ils peuvent être obtus lorsque vous relisez un script (pushd +3 est moins clair que cd $HOME/$DIR/$TMP ou similaire).

Mis à part ces avertissements, si vous êtes un utilisateur régulier de Bash ou de Zsh, vous pouvez et devriez essayer pushd et popd .


Linux
  1. Personnalisation du shell Bash

  2. Navigation rapide dans le répertoire dans le shell bash ?

  3. Le but de .bashrc et comment ça marche ?

  4. Comprendre la signification de `$_` ?

  5. Pourquoi le Regex dans Bash ne fonctionne-t-il que s'il s'agit d'une variable et pas directement ? ?

Comment programmer avec Bash :syntaxe et outils

Commandes Pushd et Popd sous Linux

Conseils de navigation en ligne de commande Linux :les bases des commandes pushd et popd

Télécharger des fichiers avec Wget sur le shell Linux - Explication et exemples

Quel est le problème avec mon script bash pour conserver les x derniers fichiers et supprimer le reste ?

Puis-je appeler pushd/popd et l'empêcher d'imprimer la pile ?