Comment utiliser les commandes pushd et popd?

Quelles sont les utilisations pratiques de pushd et popd quand il y a un avantage à utiliser ces deux commandes sur cd et cd -?

EDIT : Je » suis à la recherche dexemples pratiques dutilisation de ces deux commandes ou de raisons de conserver la pile avec les répertoires (lorsque vous avez terminé les tabulations, cd -, alias pour raccourcir cd .., etc.).

Réponse

pushd , popd et dirs sont des composants internes du shell qui vous permet de manipuler la pile de répertoires . Cela peut être utilisé pour changer de répertoire mais revenir au répertoire doù vous venez.

Par exemple

démarrer avec les répertoires suivants:

$ pwd /home/saml/somedir $ ls dir1 dir2 dir3 

pushd to dir1

$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir 

La commande

dirs confirme que nous avons maintenant 2 répertoires sur la pile. dir1 et le répertoire dorigine, somedir. REMARQUE: Notre  » actuel  » est ~/somedir/dir1.

pushd to ../dir3 (parce que nous « sommes à lintérieur dir1 maintenant)

$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3 

dirs montre que nous avons maintenant 3 répertoires dans la pile. dir3, dir1 et somedir. Notez la direction. Chaque nouveau répertoire est ajouté à gauche. Lorsque nous commençons à ouvrir des répertoires désactivé, ils « viendront également de la gauche.

changer manuellement les répertoires en ../dir2

$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir 

Commencez maintenant à ouvrir les répertoires

$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1 

Notez que nous sommes revenus à dir1.

Pop à nouveau …

$ popd ~/somedir $ pwd /home/saml/somedir 

Et nous « sommes de retour là où nous avons commencé, somedir.

Peut-être un peu déroutant, mais le chef du stac k est le répertoire dans lequel vous « êtes actuellement. Par conséquent, lorsque nous revenons à somedir, même si dirs le montre:

$ dirs ~/somedir 

Notre pile est en fait vide.

$ popd bash: popd: directory stack empty 

Commentaires

  • Merci, je comprends parfaitement le concept de pile et le fonctionnement de ces commandes. Cependant, je ‘ cherche des raisons pratiques pour conserver la pile avec les répertoires (lorsque vous avez terminé la tabulation, cd -, des alias pour raccourcir cd .., etc.).
  • Jutilise souvent pushd & popd dans les scripts car ils mévitent de me souvenir doù je venais, je peux toujours simplement popd revenir de où je suis venu. Je fais généralement popd >/dev/null 2>&1 pour le rendre silencieux. Jutilise cd- tous les jours dans mon shell. Cet article contient également dautres astuces pour gagner du temps: thegeekstuff.com/2008/10/… .
  • @Garrett – aucun que je puisse concevoir.
  • @Garrett @slm puisque cd - ne suit que le dernier répertoire, jimagine quil le ferait être possible davoir des problèmes si vous appelez une fonction qui change également de répertoire en interne. dans ce cas, la fonction finirait par se réinitialiser – dans votre répertoire actuel, pas dans le répertoire dans lequel vous souhaitez revenir. pushd / popd est la méthode la plus sûre. Remarque: je nai ‘ pas testé ma théorie.
  • Pourquoi ne pas revenir à ~/somedir/dir3 après le premier popd?

Réponse

Il y a un cas dutilisation vraiment utile pour les commandes pushd et popd pour travailler avec plusieurs dossiers simultanément.

Vous pouvez naviguer dans la pile très facilement, car elle est énumérée. Cela signifie que vous pouvez avoir plusieurs dossiers de travail à votre disposition pendant le travail.

Voir un exemple simple ci-dessous.


Commençons par créer un exemple de structure de dossier.

 user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3 

Ensuite, vous pouvez ajouter tous vos dossiers à la pile :

 user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate 

Vous pouvez le rechercher en:

 user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate 

Pour naviguer en toute sécurité, vous devez ajouter deux fois le dernier (zéro) dossier, car il sera toujours réécrit:

 user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Maintenant, vous pouvez parcourir ces dossiers et travailler avec pile comme avec les alias pour les dossiers.Je suppose que la partie suivante est explicite:

 user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Conseil supplémentaire consiste à créer un alias pour dirs -v.

Par exemple:

# In ~/.bashrc alias dirs="dirs -v" 

Commentaires

  • Et vous pouvez vider la pile de dirs -c
  • +1 pour donnant en fait quelques exemples pratiques. Il est ‘ de voir facilement ce que font pushd / popd depuis la page de manuel, mais les répertoires et cd ~ # ne sont pas évidents au début.
  • vous pouvez également utiliser une solution comme fasd pour ce type de workflow à la place, bien que
  • @Jun, il y a ‘ s  » mkdir dir {1,2,3}  » pour créer 3 répertoires en un seul coup.
  • @JunMurakami cela a fait mon année! Bonne 2020!

Réponse

Un cas dutilisation simple pour utiliser la pile de répertoires, ce que vous ne pouvez pas faire avec un simple cd est :

pushd . ajoute le répertoire actuel XX à la pile dirs. Ensuite, vous pouvez vous déplacer en utilisant cd, et pour revenir à XX, il vous suffit de faire popd quelle que soit la distance à laquelle vous vous trouvez larborescence des répertoires (peut sauter par-dessus plusieurs niveaux, sur le côté, etc.). Particulièrement utile dans les scripts bash.

Commentaires

  • Je pense que cest la fonctionnalité dont je profite le plus souvent. Étant donné que pushd / popd fonctionne indépendamment de cd, vous pouvez les utiliser comme une solution plus stable signet que cd -.
  • pour moi ce nest pas vrai. Chaque fois que jutilise cd, ma pile change.
  • oh cétait parce que jutilisais zsh, quand je passe à bash, ça marche bien
  • Cest la seule réponse de fond en ce qui concerne une comparaison avec cd -, IMO. Quant à savoir si pushd foo; < changement de répertoire aléatoire >; popd vaut plus que a = foo; cd $ a; < changement de répertoire aléatoire >; cd $ a … Pour les scripts, je peux voir une minuscule commodité syntaxique dans le premier (pushd), mais une amélioration massive de la clarté dans le second (variables [explicites]!). Pour une session interactive, je pense que je supposerais simplement que ma hiérarchie de répertoires est organisée correctement en premier lieu, et si je me perdais simplement cd ~ / back / to / évident / path.
  • @HarendraSingh vous ne ‘ Avez-vous défini AUTO_PUSHD? Cela fera que cd se comportera comme pushd, le désarmera et vous ‘ serez de retour à  » comportement normal « .

Réponse

pushd et popd vous permettent de manipuler les répertoires sur la pile.

Lorsque vous pushd un répertoire, vous placez le répertoire courant sur la pile et changez de répertoire pour celui spécifié comme paramètre.

popd vous permettra de retourner dans le répertoire de la pile.

Si vous répétez, la traversée des répertoires sera en quelque sorte préservée et vous pourrez revenir aux répertoires enregistrés dans lordre inverse de celui dans lequel vous les avez enregistrés.

Réponse

Pour bash , en gros: au lieu dutiliser cd, on peut utilisez pushd pour changer de répertoire. Avec un usage pratique: lhistorique des répertoires visités est sauvegardé (correctement: empilé) et on peut basculer entre eux:

pushd /home; pushd /var; pushd log 

Pour voir la pile utilisez dirs et pour une navigation plus facile (pour obtenir les numéros des  » stack-entries  » utilisez:

dirs -v 

Sortie:

me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp 

Utilisez maintenant ces nombres avec cd et ~ comme:

cd ~1 

Mais ces nombres sont réorganisés maintenant et se positionnent à  » 0  » va changer, donc il suffit de pushd le répertoire en première position deux fois (ou utilisez un mannequin à la position 0) comme:

me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp 

Maintenant 1..3 conservera leur position

(Pour libérer le répertoire courant de la pile / en la supprimant de lhistorique, utilisez popd)

Answer

Le pushd / popd est un concept si simple qui ma pris du temps à comprendre car les gens ont tendance à lenseigner en définissant ces commandes comme des commandes qui » manipulent la pile de répertoires « , ce qui à mon avis est très déroutant.

Je regarde les choses différemment:

pushd [nom_dossier] – va cd vers [nom_dossier] et document la destination qui est [nom_dossier] dans une pile de répertoires tandis que le répertoire supérieur dans la pile sera toujours le répertoire actuel dans lequel vous vous trouvez

popd – vous mettra dabord en lenregistrement du répertoire qui se trouve alors au sommet de la pile et supprimez la documentation (supprimez-la de la pile de répertoires)

dirs – Affiche la pile de répertoires (peut être traité comme le répertoire Db où lentrée la plus à gauche est le répertoire courant (haut de la pile).

Les 2 cas dutilisation les plus courants sont donc:

Cas dutilisation 1: Navigation avec pushd et popd

root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main 

Disons Jai fait ce qui précède car je voudrais revenir aux dossiers que jai documentés!

Notez que si je cd manuellement, jaffecterai lentrée de la pile de répertoires supérieure (qui est toujours le répertoire actuel)

root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ 

Naviguons maintenant en arrière:

root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main 

Encore une fois, je peux documenter le répertoire que je veux puis naviguez manuellement vers un autre répertoire, puis je pourrai facilement revenir au répertoire documenté que jai inséré dans la pile.

Cas dutilisation 2: Navigation en utilisant lindex de pile numérique

Disons que jai poussé en utilisant pushd dir4 dir3 dir2 dir1, maintenant en cours dexécution dir -v affichera:

root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4 

Vous pouvez maintenant effectuer nimporte quelle opération Linux impliquant des répertoires en utilisant lindex de pile:

root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt 

Vous pouvez même supprimer un entrée de la pile de dir:

root@mypc:/main$ popd ~4 

Jespère que lutilisation des mots « documenter » ou penser à la pile de dir comme une sorte de Db simplifie le concept!

Réponse

En termes simples – lorsque vous avez besoin de naviguer entre plus de 2 répertoires, généralement plusieurs fois en arrière & puis, car cd - ne le coupera pas avec autre chose que 2 dossiers.

Ainsi, par exemple, au lieu dessayer de revenir avec les longs chemins précédents en regardant lhistorique de votre tampon ou en complétant par tabulation un long chemin, vous empilez simplement les plus importants et si nécessaire, vous vous déplacez facilement vers eux par leur numéro seul. La rotation entre les structures de répertoires complexes et les longs chemins devient fluide et rapide.

Les fonctions intégrées vous permettent également de réorganiser la pile ou de faire apparaître les répertoires dont vous navez plus besoin, ce qui permet une flexibilité dans votre flux de travail.

Lempilement des répertoires peut également être utilisé dans les scripts de la même manière pour les opérations qui sétendent sur plusieurs répertoires.

Réponse

I Jai trouvé lutilisation de dirs / popd / pushd un peu inconfortable. Jai trouvé ma solution personnelle dans tcsh, en ajoutant le code suivant dans .alias

 foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*" 

de cette façon jai aliasé, par exemple, « p. » pour enregistrer le répertoire de travail actuel dans le fichier ~ / .mydir. et « cd. » pour récupérer ce répertoire quand et où je veux. « del. » supprime le fichier correspondant; « home. » définit le répertoire sur le répertoire home (équivalent à cd; p.); « cdl » répertorie les répertoires enregistrés. Notez que si vous utilisez ~ / Dropbox / .mydir $ b (ou tout autre service cloud comme par exemple ownCloud) au lieu de ~ / .mydir $ b, vous obtenez un moyen intelligent pour utiliser vos répertoires préférés sur différents comptes et ordinateurs.

Réponse

Utilisation de cd et cd - vous permet de basculer uniquement entre vos deux répertoires les plus récemment utilisés. La taille de votre « répertoire de travail » est de deux.

En utilisant pushd, vous pouvez conserver un nombre arbitrairement grand de répertoires dans votre jeu de travail.

Jutilise pushd la plupart du temps plutôt que cd. Une fois que vous avez « construit une pile de répertoires actifs avec pushd directory_name, vous pouvez ensuite passer de lun à lautre toute la journée avec pushd ~#.

pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order. 

Jutilise popd rarement, uniquement lorsque je veux supprimer un répertoire de la pile quand je sais que jai « terminé en utilisant ce répertoire.

Allez dans le répertoire et supprimez-le de la pile:

popd ~2 

Restez dans le répertoire actuel et supprimez un autre répertoire du stack:

popd +2 

Vous vous retrouvez avec un style de travail similaire à louverture de plusieurs fenêtres ou onglets de terminal (un pour chaque répertoire dans lequel vous « êtes activement travail), mais le tout dans un seul terminal.Cela permet déconomiser de lespace sur lécran, et comme les chemins de répertoire sont tous disponibles dans un seul shell, vous pouvez faire des choses comme:

  • copier des fichiers entre les répertoires avec lesquels vous travaillez actuellement
  • afficher ou modifier des fichiers dans un autre répertoire sans y aller

Exemples:

cp ~2/myfile.txt ~4 less ~2/myfile.txt 

In tcsh (mais pas bash), vous pouvez même enregistrer votre pile de répertoires dans un fichier et la restaurer plus tard.

Enregistrer:

dirs -S ~/dirstack 

Restaurer:

dirs -L ~/dirstack 

Sinon, remplacez simplement ~ dans les exemples bash avec = à utiliser dans tcsh.

pushd =2 popd =4 popd +1 

Réponse

Je lutilise comme ça dans mon bash_profile et .bashrc comme ça

vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq 

il aide Je saute entre les répertoires les plus récents utilisés sur mon terminal. 🙂 Jespère que cela vous aidera à utiliser pushd plutôt que popd Jutilise cd ~ stackednumber

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *