3 modi per modificare il tuo percorso sulla riga di comando
La variabile d’ambiente PATH
è una delle parti più importanti dell’uso della riga di comando su Linux. Su un sistema moderno, è spesso una lunghissima stringa di directory tutte separate da due punti. Se volete cambiare un elemento nel vostro percorso, può essere fastidioso dover digitare e modificare un sacco di nomi di directory diverse e ottenere tutto giusto. Fortunatamente, ci sono alcuni modi per renderlo più facile. Lo stesso vale per qualsiasi variabile d’ambiente e la maggior parte degli strumenti che ti mostrerò funzioneranno per ognuna di esse.
Panoramica
Come la maggior parte delle cose in Linux, ci sono molti modi per ottenere il tuo obiettivo. Anche se ho detto che ci sono tre modi per farlo, ci sono probabilmente un numero infinito di modi, ed eccone uno che non conterò come parte dei tre: Usare l’espansione.
Tuttavia, questo funziona solo se volete aggiungere qualcosa all’inizio o alla fine di una variabile. Per esempio, diciamo che volete aggiungere ~/foo
a PATH
:
# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"
Questo è facile, ma non aiuta se volete cancellare o cambiare qualcosa nella variabile. Non aiuta nemmeno se volete cambiare l’ordine di alcune directory esistenti.
Metodo 1: Il modo più difficile
Assumendo che siate in un terminale GUI, probabilmente avete un modo per tagliare e incollare il testo. Quindi potrebbe sembrare facile scrivere:
echo $PATH
Poi potete prendere il testo e, su una nuova linea di comando, inserire PATH="
e incollare il resto del testo. Fai le tue modifiche, chiudi la citazione e premi Enter
. Potreste pensare che non sia un gran miglioramento se avete bisogno di modificare il testo esistente, ma si scopre che se premete CONTROL+X, CONTROL+E
in bash, otterrete una bella finestra di editor dove potrete modificare il vostro comando. Questo funzionerà con qualsiasi comando, ed è molto utile quando stai tirando fuori dalla cronologia una lunga linea di comando che hai bisogno di correggere.
Come fa bash a sapere quale editor usare? La variabile d’ambiente EDITOR
. Se non ti piace l’editor che ti fa apparire di default, cambia il tuo file di avvio (ad esempio, .bashrc) per impostare la variabile:
EDITOR=nano
Questo è buono, ma possiamo fare meglio. Dopo tutto, questo metodo richiede di visualizzare la variabile, fare qualche digitazione manuale, e poi fare un copia e incolla.
Metodo 2: envedit/pathedit
Su GitHub, troverai gli script per envedit e pathedit. Questi sono semplici script che puoi mettere sul tuo sistema da qualche parte dove possono essere trovati (per esempio, /usr/local/bin). Se vuoi che siano trovati nel percorso, dovresti renderli eseguibili (chmod 755
).
Il problema è che qualsiasi cambiamento che uno script fa all’ambiente non viene mantenuto dopo che lo script è uscito (vedi la sezione Cos’è l’ambiente?, sotto). Di conseguenza, devi creare il sorgente di questi file per farli funzionare. Lo script pathedit modificherà il PATH
nel tuo editor preferito mentre il envedit
richiede un nome variabile e farà lo stesso lavoro:
# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE
È un po’ fastidioso doversi ricordare di fare i sorgenti ogni volta, quindi gli script hanno una caratteristica speciale. Se si fa il source una volta nel proprio .bashrc e si passa l’argomento alias
, gli script imposteranno un alias a se stessi in modo che semplicemente digitando pathedit o envedit il source avverrà:
. pathedit alias # now just typing pathedit will work
Come al solito, lo script usa $EDITOR
per sapere quale editor usare. Se vuoi un editor speciale solo per questo scopo, imposta $PATHEDIT_EDITOR
o $ENVEDIT_EDITOR
e sovrascriverà le solite impostazioni. Se questo non è impostato, lo script cerca $EDITOR
e $VISUAL
prima di passare a vi.
Metodo 3: envedit2/pathedit2
Il terzo metodo è anche sulla stessa pagina di GitHub. Il funzionamento è proprio lo stesso del metodo 2. Cioè, metti ancora i file da qualche parte e li chiami con l’argomento alias
per impostarli. Tuttavia, questi script non usano il vostro editor di testo. Invece, caricano il buffer della linea di comando bash con la stringa corretta da modificare. Questo è molto simile al primo metodo, eccetto che i passi sono automatizzati per te.
Nota che quando esegui uno di questi, impostano un alias per envedit o pathedit, quindi non userai i 2 per usarli tranne quando li imposti. Questo significa anche che l’ultimo che imposti “vince”. Non puoi impostarli entrambi allo stesso tempo, a meno che tu non faccia qualche intervento sugli script o non imposti i tuoi alias.
Quando esegui uno di questi script, potresti vedere uno strano carattere di escape apparire prima del tuo prompt. Quello è il rapporto di stato che innesca il riempimento del buffer. È innocuo e se ti dà fastidio, basta premere CONTROL+L
per ridisegnare lo schermo.
Ci sono i tuoi tre
Se vuoi usare solo questi script, hai finito. Spero che li troviate utili. Se non vi interessa sapere come e perché tutto questo funziona, potete fermarvi qui. Ma se vuoi sapere di più sul perché questi script sono alias e su come funziona l’ambiente, continua a leggere.
Cos’è l’ambiente?
Puoi pensare all’ambiente come ad un piccolo database che viene passato ad ogni programma. Per esempio, probabilmente hai una variabile d’ambiente chiamata EDITOR
che di solito è impostata su qualcosa come vi, emacs o nano. Quando un programma ha bisogno di richiamare un editor di testo, scoprirà quale editor vi piace usare leggendo quella variabile d’ambiente.
Quando un programma A avvia un altro programma (B), il programma figlio riceve una copia dell’ambiente, anche se il programma A potrebbe fare delle modifiche prima di lanciare B. Tuttavia, qualsiasi modifica fatta da B è in vigore solo per B e per qualsiasi programma che avvia.
Praticamente, questo significa che nulla di ciò che fate in un programma lanciato avrà un impatto su qualsiasi altro programma che non è partito dal programma. Questo è un vero problema negli script di shell. Per esempio, supponiamo che vogliate scrivere uno script che aggiunga ~/foo
alla fine di PATH
. Questo non funzionerà:
#!/bin/bash
# Bad example
PATH="$PATH:~/foo"
Il problema è che lo script verrà eseguito nella sua copia di bash. Cambierà doverosamente la variabile PATH
e poi uscirà, facendo svanire la nuova copia di PATH
. Naturalmente, il cambiamento sarà in vigore per qualsiasi altra parte dello script. Per far sì che questo funzioni, avreste bisogno di source
lo script (e poi non ha bisogno della linea #!, anche se non fa male lasciarla). Supponiamo che il nome dello script di cui sopra sia foopath
. Potreste dire:
source ./foopath
# or the same thing:
. ./foopath
Ecco come funzionano alcuni degli script menzionati, con il sourcing nella shell possono cambiare l’ambiente corrente della shell.
È tutto, davvero… tranne
Se siete arrivati fin qui, complimenti. Spero che troviate questi strumenti utili e assicuratevi di segnalare i bug su GitHub.
Bonus Round
Ho detto prima che tagliare e incollare manualmente potrebbe essere il modo più difficile. Tuttavia, c’è un altro modo per farlo. Se hai /etc/inputrc o ~/.inputrc impostato correttamente puoi digitare (ma non premere Invio):
PATH=$PATH
Poi premi Alt+Control+E e la shell espanderà la variabile $PATH per te. Tuttavia, se provate:
PATH="$PATH"
Vedrete che espandendola perderete le vostre virgolette. Dovete fare lo scomodo:
PATH=\"$PATH\"
Poi premete Alt+Control+E. L’output di bind -P
può dirvi se la funzione shell-expand-line
è legata a qualcosa.