Il pushd / popd è un concetto così semplice che mi ci è voluto un po 'di comprensione poiché le persone tendono a insegnarlo definendo questi comandi come comandi che "manipolano lo stack di directory" che secondo me è confuso.
Lo guardo in un modo diverso:
pushd [nome_cartella] - eseguirà il cd su [nome_cartella] e documenterà la destinazione che è [nome_cartella] in uno stack dir mentre la directory principale nello stack sarà sempre la directory corrente in cui ci si trova
popd : ti inserirà prima nel record della directory che si trova in cima allo stack, quindi lo rimuoverà dallo stack
dirs : stamperà lo stack dir (può essere trattato come Db dir dove la voce più a sinistra è la directory corrente (parte superiore dello stack)
Quindi i 2 casi d'uso più popolari sono:
Caso d'uso 1: Navigazione tramite pushd e 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
Diciamo che ho fatto quanto sopra poiché vorrei tornare alle cartelle che ho documentato!
Nota che se cd manualmente, influenzerò la voce dello stack dir superiore (che è sempre la dir corrente)
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$
Andiamo indietro ora:
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
Ancora una volta posso documentare qualunque dir desidero e poi navigare manualmente verso un'altra dir, quindi potrò facilmente tornare alla dir documentata che ho inserito nello stack.
Caso d'uso 2: navigazione mediante l'indice dello stack numerico
Diciamo che ho spinto usando pushd dir4 dir3 dir2 dir1, ora in esecuzione dir -v mostrerà:
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
Ora puoi eseguire qualsiasi operazione Linux che coinvolga directory usando l'indice dello stack:
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
Puoi persino eliminare una voce specifica dallo stack dir:
root@mypc:/main$ popd ~4
Spero che usare le parole "documentare" o pensare allo stack dir come una sorta di Db semplifichi il concetto!
cd -
, alias per l'accorciamentocd ..
, ecc.).