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
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 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)
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$
Passons 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 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:
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 n’importe quelle opération Linux impliquant des répertoires utilisant l’index 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 une entrée spécifique de la pile de répertoires:
root@mypc:/main$ popd ~4
J'espère que l'utilisation des mots "documenter" ou penser à la pile de répertoires comme une sorte de Db simplifie le concept!
cd -
, alias de raccourcissementcd ..
, etc.).