Nella prima parte di questa serie, abbiamo discusso del cd - comando in dettaglio, e nella seconda parte, abbiamo dato uno sguardo approfondito al pushd e popd comandi così come gli scenari in cui sono utili.
Continuando con la nostra discussione sugli aspetti della navigazione da riga di comando, in questo tutorial parleremo del CDPATH variabile di ambiente attraverso esempi di facile comprensione. Discuteremo anche alcuni dettagli anticipati relativi a questa variabile.
Ma prima di procedere, vale la pena ricordare che tutti gli esempi in questo tutorial sono stati testati su Ubuntu 14.04 con la versione Bash 4.3.11(1).
La variabile d'ambiente CDPATH
Anche se il tuo lavoro da riga di comando comporta l'esecuzione di tutte le operazioni in una directory particolare, ad esempio la tua directory home -, devi anche fornire percorsi assoluti durante il cambio di directory. Ad esempio, considera una situazione in cui mi trovo in /home/himanshu/Downloads directory:
$ pwd
/home/himanshu/Downloads
E il requisito è passare a /home/himanshu/Desktop directory. Per fare ciò, di solito, dovrò eseguire:
cd /home/himanshu/Desktop/
o
cd ~/Desktop/
o
cd ../Desktop/
Non sarebbe facile se potessi semplicemente eseguire il seguente comando:
cd Desktop
Sì, è possibile. Ed è qui che entra in gioco la variabile d'ambiente CDPATH. Puoi usare questa variabile per definire la directory di base per il cd comando.
Se provi a stamparne il valore, vedrai che questa variabile env è vuota per impostazione predefinita:
$ echo $CDPATH
$
Ora, considerando il caso che abbiamo discusso finora, usiamo questa variabile di ambiente per definire /home/himanshu come directory di base per il comando cd.
Il modo più semplice per farlo è:
export CDPATH=/home/himanshu
E ora posso fare ciò che non ero in grado di fare prima, da /home/himanshu/Downloads directory, eseguire il cd Desktop comando riuscito.
$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$
Ciò significa che ora posso fare un cd in qualsiasi directory in /home/himanshu senza specificare esplicitamente /home/himanshu o ~ o ../ (o più ../ )nel comando cd.
Punti da tenere a mente
Quindi ora sai come abbiamo usato la variabile d'ambiente CDPATH per passare facilmente a/da /home/himanshu/Downloads da/a /home/himanshu/Desktop . Ora, considera una situazione in cui nel /home/himanshu/Desktop contiene una sottodirectory denominata Download , ed è quest'ultimo dove intendi passare.
Ma improvvisamente ti rendi conto che facendo un cd Desktop ti porterà a /home/himanshu/Desktop . Quindi, per assicurarti che ciò non accada, fai:
cd ./Download
Sebbene non ci siano problemi nel suddetto comando di per sé, questo è uno sforzo in più da parte tua (per quanto piccolo possa essere), soprattutto considerando che dovrai farlo ogni volta che si verifica una situazione del genere. Una soluzione più elegante a questo problema può essere quella di impostare originariamente la variabile CDPATH nel modo seguente:
export CDPATH=".:/home/himanshu"
Ciò significa che stai dicendo al comando cd di cercare prima la directory nella directory di lavoro corrente, quindi provare a cercare in /home/himanshu directory. Ovviamente, se vuoi o meno che il comando cd si comporti in questo modo dipende interamente dalle tue preferenze o esigenze:la mia idea alla base della discussione di questo punto era di farti sapere che questo tipo di situazione potrebbe verificarsi.
Come ormai avrai capito, una volta impostata la variabile CDPATH env, il suo valore - o l'insieme di percorsi che contiene - sono gli unici posti sul sistema in cui il comando cd cerca le directory (tranne ovviamente gli scenari in cui-in usi percorsi assoluti). Quindi, sta a te assicurarti che il comportamento del comando rimanga coerente.
Andando avanti, se esiste uno script bash che utilizza il comando cd con percorsi relativi, è meglio cancellare o deselezionare prima la variabile di ambiente CDPATH, a meno che tu non sia d'accordo con l'essere intrappolati in problemi imprevisti. In alternativa, invece di usare esporta comando sul terminale per impostare CDPATH, puoi impostare la variabile di ambiente nel tuo .bashrc
dopo aver testato le shell interattive/non interattive per assicurarsi che la modifica che stai cercando di apportare si rifletta solo nelle shell interattive.
Anche l'ordine in cui i percorsi appaiono nel valore della variabile di ambiente è importante. Ad esempio, se la directory corrente è elencata prima di /home/himanshu , quindi il comando cd cercherà prima una directory nella directory di lavoro attuale e poi passerà a /home/himanshu . Tuttavia, se il valore è "/home/himanshu:." quindi la prima ricerca verrà effettuata in /home/himanshu e successivamente la directory corrente. Inutile dire che ciò influenzerà ciò che fa il comando cd e potrebbe causare problemi se non sei a conoscenza dell'ordine dei percorsi.
Tieni sempre presente che la variabile d'ambiente CDPATH, come suggerisce il nome, funziona solo per il comando cd. Ciò significa che all'interno di /home/himanshu/Downloads directory, puoi eseguire il cd Desktop comando per passare a /home/himanshu/Desktop directory, ma non puoi eseguire un ls . Ecco un esempio:
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$
Tuttavia, potrebbero esserci alcune semplici soluzioni alternative. Ad esempio, possiamo ottenere ciò che vogliamo con il minimo sforzo nel modo seguente:
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~
Ma sì, potrebbe non esserci una soluzione alternativa per ogni situazione.
Un altro punto importante: come avrai notato, ogni volta che utilizzi il comando cd con la variabile di ambiente CDPATH impostata, il comando produce il percorso completo della directory a cui stai passando nell'output. Inutile dire che non tutti vorrebbero avere queste informazioni ogni volta che eseguono il comando cd sulla propria macchina.
Per assicurarti che questo output venga soppresso, puoi usare il seguente comando:
alias cd='>/dev/null cd'
Il suddetto comando silenzia l'output ogni volta che il comando cd ha esito positivo, ma consentirà la produzione di messaggi di errore ogni volta che il comando fallisce.
Infine, nel caso in cui dovessi affrontare un problema in cui, dopo aver impostato la variabile d'ambiente CDPATH, non puoi utilizzare la funzione di completamento delle schede della shell, quindi puoi provare a installare e abilitare il completamento bash - maggiori informazioni qui.
Conclusione
La variabile d'ambiente CDPATH è un'arma a doppio taglio:se non usata con cautela e completa conoscenza, potrebbe farti finire in alcune trappole complesse che potrebbero richiedere molto tempo prezioso per essere risolte. Naturalmente, ciò non significa che non dovresti mai provarlo; valuta solo tutte le opzioni disponibili e se concludi che l'utilizzo di CDPATH sarebbe di grande aiuto, vai avanti e usalo.
Hai usato CDPATH come un professionista? Hai altri suggerimenti da condividere? Per favore condividi i tuoi pensieri nei commenti qui sotto.