La spinta e popd i comandi sono funzionalità integrate della shell Bash per aiutarti a "segnare" le directory per una rapida navigazione tra le posizioni sul tuo disco rigido. Potresti già pensare che il terminale sia un modo incredibilmente veloce per navigare nel tuo computer; con pochi tasti, puoi andare ovunque sul tuo disco rigido, sull'archiviazione collegata o sulla condivisione di rete. Ma quella velocità può diminuire quando ti ritrovi ad andare avanti e indietro tra le directory o quando ti "perdi" all'interno del tuo filesystem. Sono proprio questi i problemi pushd e popd può aiutarti a risolvere.
premere
Nella sua forma più semplice, pushd è molto simile a cd . Ti porta da una directory all'altra. Supponi di avere una directory chiamata one , che contiene una sottodirectory denominata due , che contiene una sottodirectory denominata tre , e così via. Se la tua directory di lavoro corrente è uno , quindi puoi passare a due o tre o ovunque con il cd comando:
$ pwd
one
$ cd two/three
$ pwd
three
Puoi fare lo stesso con pushd :
$ pwd
one
$ pushd two/three
~/one/two/three ~/one
$ pwd
three
Il risultato finale di pushd è lo stesso di cd , ma c'è un ulteriore risultato intermedio:pushd fa eco alla directory di destinazione e al punto di origine. Questo è il tuo stack di directory , ed è ciò che rende pushd unico.
Pile
Una pila, nella terminologia informatica, si riferisce a un insieme di elementi. Nel contesto di questo comando, gli elementi sono le directory che hai visitato di recente usando il pushd comando. Puoi pensarla come una storia o una traccia di breadcrumb.
Puoi spostarti in tutto il tuo filesystem con pushd; ogni volta, le tue posizioni precedenti e nuove vengono aggiunte allo stack:
$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/five ~/one/two/three/four ~/one/two/three ~/one
Navigazione nello stack
Una volta creato uno stack, puoi usarlo come raccolta di segnalibri o waypoint per viaggi veloci. Ad esempio, supponi che durante una sessione stai facendo molto lavoro all'interno di ~/uno/due/tre/quattro/cinque struttura di directory di questo esempio. Sai di essere stato a uno di recente, ma non ricordi dove si trova nel tuo pushd pila. Puoi visualizzare il tuo stack con il +0 (è un segno più seguito da uno zero), che indica pushd non per passare a nessuna directory nello stack, ma richiede anche pushd per fare eco al tuo stack attuale:
$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five
In alternativa, puoi visualizzare lo stack con le dir comando e puoi vedere il numero di indice per ciascuna directory utilizzando il -v opzione:
$ dirs -v
0 ~/one/two/three/four
1 ~/one/two/three
2 ~/one
3 ~/one/two/three/four/five
La prima voce nel tuo stack è la tua posizione attuale. Puoi confermarlo con pwd come al solito:
$ pwd
~/one/two/three/four
A partire da 0 (la tua posizione attuale e la prima voce del tuo stack), il secondo l'elemento nel tuo stack è ~/uno , che è la destinazione desiderata. Puoi andare avanti nel tuo stack usando il +2 opzione:
$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/one
Questo cambia la tua directory di lavoro in ~/uno e ha anche spostato la pila in modo che la tua nuova posizione sia in primo piano.
Puoi anche tornare indietro nel tuo stack. Ad esempio, per arrivare rapidamente a ~/uno/due/tre dato l'output di esempio, puoi tornare indietro di uno, tenendo presente che pushd inizia con 0:
$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Aggiungere allo stack
Puoi continuare a navigare nel tuo stack in questo modo e rimarrà un elenco statico delle directory visitate di recente. Se vuoi aggiungere una directory, fornisci semplicemente il percorso della directory. Se una directory è nuova nello stack, viene aggiunta all'elenco proprio come ti aspetteresti:
$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Ma se esiste già nello stack, viene aggiunto una seconda volta:
$ pushd ~/one
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Sebbene lo stack sia spesso usato come elenco di directory a cui desideri accedere rapidamente, è davvero una vera storia di dove sei stato. Se non vuoi che una directory venga aggiunta in modo ridondante allo stack, devi utilizzare +N e -N notazione.
Rimozione di directory dallo stack
Il tuo stack, ovviamente, non è immutabile. Puoi aggiungerlo con pushd o rimuovi elementi da esso con popd .
Ad esempio, supponi di aver appena usato pushd per aggiungere ~/uno al tuo stack, facendo ~/uno la tua attuale directory di lavoro. Per rimuovere il primo elemento (o "zeroeth", se preferisci):
$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
$ pwd
~/one
Ovviamente puoi rimuovere qualsiasi elemento, iniziando il conteggio da 0:
$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/one
Puoi anche utilizzare popd dal fondo dello stack, iniziando sempre con 0. Ad esempio, per rimuovere la directory finale dallo stack:
$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five
Se usato in questo modo, popd non cambia la tua directory di lavoro. Manipola solo il tuo stack.
Navigazione con popd
Il comportamento predefinito di popd , senza argomenti, consiste nel rimuovere il primo elemento (zeroth) dallo stack e rendere l'elemento successivo la directory di lavoro corrente.
Questo è molto utile come comando di cambio rapido, quando, ad esempio, stai lavorando in due directory diverse e hai solo bisogno di nasconderti per un momento in un'altra posizione. Non devi pensare al tuo stack di directory se non hai bisogno di una cronologia elaborata:
$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one
Inoltre, non è necessario utilizzare pushd e popd in rapida successione. Se usi pushd per visitare una posizione diversa, quindi distrarti per tre ore inseguendo un bug o facendo ricerche, troverai il tuo stack di directory in paziente attesa (a meno che tu non abbia terminato la sessione del terminale):
$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one
Pushd e popd nel mondo reale
La spinta e popd i comandi sono sorprendentemente utili. Una volta che li avrai appresi, troverai delle scuse per metterli a frutto e acquisirai familiarità con il concetto di stack di directory. Prendere confidenza con pushd è stato ciò che mi ha aiutato a capire git stash , che non è del tutto correlato a pushd ma simili nell'intangibilità concettuale.
Utilizzo di pushd e popd negli script di shell può essere allettante, ma in generale è probabilmente meglio evitarli. Non sono portatili al di fuori di Bash e Zsh e possono essere ottusi durante la rilettura di uno script (pushd +3 è meno chiaro di cd $HOME/$DIR/$TMP o simili).
A parte questi avvisi, se sei un normale utente Bash o Zsh, puoi e dovresti provare pushd e popd .