Cosa fa la linea di esportazione PATH in .bashrc?


9

Non mi piace Linux e ho il seguente dubbio a seguito di un tutorial.

Devo modificare il bashrcfile. Che tipo di impostazioni sono contenute in questo file? Penso che qualcosa sia correlato all'ambiente della shell bash ma non ne sono così sicuro.

Devo inserire questa riga:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

Cosa significa esattamente questa linea?

Penso che questa exportaffermazione sia usata per creare una nuova variabile rendendola disponibile per altri programmi.

Ma cosa significa esattamente questa linea? Il PATHnome della variabile che sto definendo? Che cosa è $HOME?

Cosa significa il :simbolo tra PATH=$HOME/.local/bine $HOME/.local/usr/bine la $PATHsezione nell'espressione precedente?

Cosa significa esattamente questa espressione?


Il: tra gli elementi è il separatore per ogni segmento. Senza di essa, il tuo percorso sarebbe un percorso continuo e non funzionerebbe.
Terrance

In Ubuntu questo tipo di PATHmodifiche è già stato fatto nel ~/.profilefile, quindi è un po 'incoerente fare cose simili ~/.bashrc. Migliore IMO per modificare il codice già ~/.profileinserito se necessario. Attualmente il ~/.profilefile predefinito include questa riga:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson,

@GunnarHjalmarsson: ci sono alcune situazioni che rendono differenti .profile e .bashrc. Il file .profile viene analizzato dalle shell di accesso e non dalle sottotitoli. Ma dal momento che è necessario accedere comunque per avviare una subshell, questo è OK poiché le subshells erediteranno $ PATH. Il file .bashrc non verrà analizzato dalla shell di accesso ma verrà analizzato dai subshells. La differenza viene quando hai delle cose che non sono figli delle shell di login (forse alcuni script di automazione fantasiosi che chiamano altri script come git commit hook) - qualsiasi cosa in .profile non verrà letta in modo da essere ignorata
slebetman

@slebetman: Giusto, e nel caso di un desktop c'è un'altra differenza, che non fanno menzione: a differenza ~/.bashrc, ~/.profileè di provenienza dal display manager, in modo che solo le variabili fissati dalle ~/.profilesono disponibili quando si avvia i programmi dalla ambiente grafico. E ciò accade presto, quindi dovrebbe essere ok per i processi avviati automaticamente per la sessione.
Gunnar Hjalmarsson,

Risposte:


16

Per ricapitolare tutto quanto menzionato in questa domanda,

La exportparte

La exportriga indica che la variabile dichiarata dopo sarà accessibile ai processi figlio. In altre parole, i processi saranno in grado di accedere alla variabile dichiarata dopo la exportparola chiave attraverso l'ambiente della shell. Quindi, se hai fatto qualcosa di simile export FOO="BAR"e poi ottenuto le modifiche nel tuo ambiente shell, puoi digitare $FOOe ottenere BAR.

La PATHparte

La linea del percorso è proprio come hai dichiarato: sta dichiarando una variabile che ha il nome PATHper l'ambiente shell. Nell'ambiente bash, PATHha uno scopo speciale di definire dove si trovano i programmi del computer. Ciò consente di digitare comandi personalizzati per gli script senza digitare la directory completa. Si noti che PATH è contrassegnato per l'esportazione per impostazione predefinita, quindi questa riga non deve essere riscritta. Non fa male, però.

Il $HOMEnella PATHvariabile

All'inizio del percorso assegnato alla PATHvariabile, $HOMEviene dichiarato. Ciò significa che il computer prenderà praticamente il valore memorizzato HOMEe lo incolverà davanti al resto della riga durante la lettura.

Il :tra entrambi i percorsi

Il :equivale a una virgola nelle frasi. Separa semplicemente le tre directory. Senza queste tre directory, la console non riconoscerebbe i comandi che riceve. Queste tre posizioni sono le tre directory più comunemente utilizzate per i file di script / comandi da archiviare e pertanto dovrebbero essere accessibili dal terminale senza dover scrivere il percorso completo del file.


Bella risposta! "La riga di esportazione indica che la variabile dichiarata dopo che sarà accessibile ai processi figlio" è il genitore di questi processi figlio il terminale da cui eseguirò un comando?
vadasambar,

5

La PATHvariabile fa sapere a bash dove cercare i programmi eseguibili, quindi se hai uno script o qualche altro file eseguibile $HOME/.local/bin, la modifica PATHti permetterà di digitare ed eseguire quel file proprio come fai con lso df.

exportsignifica solo rendere tale PATHvariabile disponibile anche per altri programmi eseguiti da bash.

Per quanto riguarda : , è solo un separatore per ogni directory. È lo stesso di una virgola in un elenco di parole, niente di più.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.