pushd
, popd
Et dirs
sont builtins shell qui vous permettent de manipuler la pile de répertoires . Cela peut être utilisé pour changer de répertoire mais pour revenir au répertoire d'où vous venez.
Par exemple
démarrer avec les répertoires suivants:
$ ls
dir1 dir2 dir3
pushd à dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
La commande confirme que nous avons maintenant 2 répertoires sur la pile. dir1
et le répertoire d' origine, somedir
.
pushd to ../dir3 (parce que nous sommes à l'inté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 3 répertoires dans la pile maintenant. dir3
, dir1
Et somedir
. Remarquez la direction. Chaque nouveau répertoire est ajouté à gauche. Lorsque nous commencerons à supprimer les répertoires, 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
Maintenant, commencez à ouvrir des répertoires
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Remarquez que nous sommes revenus à dir1
.
Pop encore ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
Et nous sommes de retour là où nous avons commencé somedir
.
Cela peut paraître un peu déroutant, mais la tête de la pile est le répertoire dans lequel vous vous trouvez actuellement. Par conséquent, lorsque nous revenons à somedir
, même si dirs
cela montre ce qui suit:
$ dirs
~/somedir
Notre pile est en fait vide.
$ popd
bash: popd: directory stack empty
cd -
, alias de raccourcissementcd ..
, etc.).pushd
&popd
dans les scripts b / c, ils m'évitent d'avoir à me rappeler d'où je viens, je peux toujours simplementpopd
revenir de l'endroit d'où je viens. Je fais habituellementpopd >/dev/null 2>&1
pour le rendre silencieux. J'utilise cd tous les jours dans ma coquille. Cet article contient également d'autres astuces permettant de gagner du temps : thegeekstuff.com/2008/10/… .cd -
ne suit que le dernier répertoire, j'imagine qu'il serait possible d'avoir des problèmes si vous appelez une fonction qui change également de répertoire en interne. dans ce cas, la fonction finirait par être réinitialisée - 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. Note: je n'ai pas testé ma théorie.~/somedir/dir3
après le premierpopd
?Il existe un cas d'utilisation
pushd
et despopd
commandes vraiment utiles pour travailler avec plusieurs dossiers simultanément.Vous pouvez naviguer très facilement dans la pile, car elle est énumérée. Cela signifie que vous pouvez disposer de plusieurs dossiers de travail pendant le travail.
Voir un exemple simple ci-dessous.
Tout d'abord, créons un exemple de structure de dossiers.
Ensuite, vous pouvez ajouter tous vos dossiers à la pile:
Vous pouvez le rechercher en:
Pour naviguer en toute sécurité, vous devez ajouter le dernier (zéro) dossier deux fois, car il sera toujours réécrit:
Maintenant, vous pouvez naviguer dans ces dossiers et travailler avec stack comme avec des alias pour les dossiers. Je suppose que la partie suivante est explicite:
Astuce supplémentaire est de créer un alias pour
dirs -v
.Par exemple:
la source
dirs -c
Un cas d'utilisation simple pour utiliser dirs empiler ce que vous ne pouvez pas faire simplement avec cd est:
pushd .
ajoute le répertoire courant XX àdirs
empiler. Ensuite, vous pouvez vous déplacer en utilisantcd
, et pour revenir à XX, vous le ferezpopd
quelle que soit votre position dans l'arborescence de répertoires (vous pouvez sauter par-dessus plusieurs niveaux, de côté, etc.). Particulièrement utile dans les scripts bash.la source
pushd
/popd
travail indépendamment decd
, vous pouvez les utiliser comme marque-pages plus stable quecd -
.pushd
etpopd
vous permettent de manipuler les répertoires sur la pile.Lorsque vous êtes
pushd
un répertoire, vous placez le répertoire actuel sur la pile et changez de répertoire pour celui spécifié en paramètre.popd
vous permettra de revenir au répertoire sur la pile.Si vous répétez, la traversée de répertoires sera en quelque sorte préservée et vous pourrez revenir aux répertoires enregistrés dans l'ordre inverse de celui dans lequel vous les avez enregistrés.
la source
pour bash , fondamentalement: au lieu d’utiliser cd, on peut utiliser
pushd
pour changer de répertoire, avec l’utilisation pratique: l’historique des répertoires visités est sauvegardé (correctement: empilé) et on peut basculer entre euxPour voir la pile utilisée
dirs
et pour faciliter la navigation (pour obtenir les numéros des "entrées de pile", utilisez:Sortie:
Maintenant, utilisez ces chiffres avec
cd
et~
comme:Mais ces chiffres sont maintenant réorganisés et la position "0" va changer, il suffit donc de placer
pushd
le répertoire à la position la plus haute deux fois (ou d'utiliser un mannequin à la position 0) comme:maintenant 1..3 va y rester
(pour libérer le répertoire en cours de la pile / le supprimer de l'utilisation de l'historique
popd
)la source
Une utilisation pratique que j'ai trouvée consiste à basculer entre les répertoires à l'aide de pushd et popd.
Supposons que nous ayons deux répertoires dir1 et dir2 et que je dois basculer entre eux de façon continue pour une raison quelconque, xyz.
Actuellement, je suis dans somedir qui a deux répertoires
dir1
etdir2
:Maintenant je passe à
dir1
Maintenant, je vais ajouter
dir1
à empiler et passer àdir2
Comme vous pouvez le voir, j'ai maintenant
dir2
etdir1
sur la pile et je suis actuellement dansdir2
.Maintenant, pour revenir à
dir1
, je vais courirpushd || popd
.Voilà, je suis dans dir1 et j'ai dir1 et dir2 sur pile. Pour revenir à dir2 à nouveau, lancez
pushd || popd
C'est un moyen simple de basculer entre les répertoires. Maintenant, vous pourriez savoir quoi, pourquoi je dois basculer entre les annuaires? Un exemple d'utilisation est que, lorsque je travaille sur une application Web, j'ai mon fichier make dans un répertoire et mes fichiers journaux dans un autre répertoire. Souvent, lors du débogage de l'application, je dois passer d'un répertoire à un autre, consulter les derniers journaux, puis revenir au répertoire de création, apporter des modifications et construire l'application.
la source
pushd
etpopd
surcd -
?" Vous n'avez clairement pas répondu à cette question, car vous décrivez exactement ce quecd -
fait. (2) Quel est le point de direpushd || popd
? Oui, je sais que celacmdA || cmdB
signifie courircmdA
et, si cela échoue, alors courezcmdB
. Je demande à quoi ça sert dans ce contexte.pushd
sans argument signifie "permuter les deux premiers éléments de la pile de répertoires"; il échoue si le répertoire en cours est le seul élément de la pile de répertoires. Dans ce cas,popd
échouera aussi.pushd
etpopd
.pushd || popd
pour passer d'un répertoire à un autre:pushd
sans argument, c'est exactement ce que vous faites.cd -
existe explicitement uniquement pour revenir au dernier répertoire. De plus, la question demandait l’avantage depushd
terminercd -
, alors que cette réponse n’apporte clairement qu’un inconvénient: davantage de frappe.|| popd
de cette bascule? S'il vous plaît, expliquez. (N'est-ce pas assez poussé?)cd -
pour basculer entre deux répertoires. De plus,cd
sans argument, retourne dans votre répertoire personnel.En termes simples - lorsque vous devez naviguer entre plus de 2 répertoires, généralement plusieurs fois,
cd -
ne vous coupez pas avec plus de 2 dossiers.Ainsi, par exemple, au lieu d'essayer de retrouver les longs chemins précédents en consultant l'historique de votre mémoire tampon ou en complétant un chemin long, vous empilez simplement les plus importants et, si nécessaire, vous y accédez facilement par leur seul numéro. La rotation entre les structures de répertoires complexes et les longs chemins devient simple et rapide.
Les fonctions intégrées vous permettent également de réorganiser la pile ou d’extraire les répertoires dont vous n’avez plus besoin, ce qui vous permet une plus grande souplesse dans votre flux de travail.
L'empilement de répertoires peut également être utilisé dans des scripts de la même manière pour des opérations couvrant plusieurs répertoires.
la source
J'ai trouvé l'utilisation de dirs / popd / pushd un peu inconfortable. Je suis venu avec ma solution personnelle dans tcsh, en ajoutant le code suivant dans .alias
de cette façon, j'ai aliasé, par exemple, "p." enregistrer le répertoire de travail en cours dans le fichier ~ / .mydir. et "cd." pour récupérer ce dir quand et où je veux. "del." supprime le fichier correspondant; "domicile." définit le répertoire sur le répertoire d'origine (équivalent à cd; p.); "cdl" liste les répertoires sauvegardés. Notez que si vous utilisez ~ / Dropbox / .mydir $ b (ou tout autre service cloud tel que ownCloud) au lieu de ~ / .mydir $ b, vous disposez d’un moyen intelligent d’utiliser vos répertoires préférés sur différents comptes et machines.
la source
cela m'aide à naviguer entre les répertoires les plus récents utilisés sur mon terminal. :-) J'espère que ça vous aidera à utiliser pushd plutôt popd j'utilise cd ~ stackednumber
la source
Utiliser
cd
etcd -
vous permet de basculer uniquement entre vos deux répertoires les plus récemment utilisés. Votre taille de "répertoire de travail de répertoire" est deux.En utilisant
pushd
, vous pouvez conserver un nombre arbitrairement grand de répertoires dans votre groupe de travail.J'utilise la
pushd
plupart du temps plutôt quecd
. Une fois que vous avez constitué une pile de répertoires actifspushd directory_name
, vous pouvez les parcourir toute la journéepushd ~#
.J'utilise
popd
rarement, uniquement lorsque je veux supprimer un répertoire de la pile lorsque je sais que j'en ai terminé avec ce répertoire.Allez dans le répertoire et retirez-le de la pile:
Restez dans le répertoire en cours et supprimez un autre répertoire de la pile:
Vous vous retrouvez avec un style de travail similaire à l'ouverture de plusieurs fenêtres ou onglets de terminal (un pour chaque répertoire dans lequel vous travaillez activement), mais dans un seul terminal. Cela permet d'économiser de l'argent sur l'écran. De plus, comme les chemins d'accès aux répertoires sont tous disponibles dans un seul shell, vous pouvez effectuer les opérations suivantes:
Exemples:
Dans
tcsh
(mais pasbash
), vous pouvez même enregistrer votre pile de répertoires dans un fichier et le restaurer plus tard.Sauver:
Restaurer:
Sinon, il suffit de remplacer
~
dans lesbash
exemples par=
pour utilisation danstcsh
.la source
Le pushd / popd est un concept si simple qui m'a pris un certain temps à comprendre, car les gens ont tendance à l'enseigner en définissant ces commandes comme des commandes qui «manipulent la pile de répertoires», ce qui, à mon avis, prête à confusion.
Je le regarde d'une manière différente:
pushd [nom_dossier] - cd sur [nom_dossier] et documentera la destination qui est [nom_fichier] dans une pile de répertoires, tandis que le répertoire principal de la pile sera toujours le répertoire actuel dans lequel vous vous trouvez.
popd - vous cdera d' abord dans le répertoire qui se trouve en haut de la pile, puis le retirera de la pile
dirs - va imprimer la pile de dir (peut être traité comme le dir Db où l'entrée la plus à gauche est le répertoire courant (en haut de la pile)
Donc, les 2 cas d'utilisation les plus populaires sont:
Cas d'utilisation 1: navigation à l'aide de pushd et popd
Disons que j'ai fait ce qui est mentionné ci-dessus puisque je voudrais revenir aux dossiers que j'ai documentés!
Notez que si je cd manuellement, j'affecterai la première entrée de la pile de dir (qui est toujours le dir actuel)
Passons maintenant en arrière:
Encore une fois, je peux documenter le répertoire de mon choix puis naviguer manuellement vers un autre répertoire, ce qui me permettra de revenir facilement au répertoire documenté que j'ai inséré dans la pile.
Cas d'utilisation 2: navigation à l'aide d'un index de pile numérique
Disons que j'ai poussé en utilisant pushd dir4 dir3 dir2 dir1, maintenant lancer dir -v montrera:
Vous pouvez maintenant effectuer n’importe quelle opération Linux impliquant des répertoires utilisant l’index de pile:
Vous pouvez même supprimer une entrée spécifique de la pile de répertoires:
J'espère que l'utilisation des mots "documenter" ou penser à la pile de répertoires comme une sorte de Db simplifie le concept!
la source