Qual è la differenza tra “echo $ PATH” e / etc / percorsi?


10

Quando ho echo $ PATH ottengo questo: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Voglio rimuovere alcuni percorsi da questo, ma quando apro il file usando il comando vim /etc/paths, ottengo i seguenti risultati:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Il file / etc / percorsi è diverso dalla variabile $ PATH?


Quale versione di OS X? Non ho /etc/pathsnel mio, ma sto correndo 10.4.11e le cose sono probabilmente cambiate da allora
Fox

1
Ma secondo una risposta su AskDifferent , /etc/pathsviene utilizzato per generare il valore predefinito $PATH, che è possibile modificare in seguito
Fox

È l'impostazione predefinita. Quando l'utente avvia la propria shell, tuttavia, verrà modificata da altri file che ~/.bashrc~/.profile
eseguono la

Risposte:


14

/etc/pathsfa parte di ciò che viene utilizzato per impostare i $PATHprocessi di shell. Quando si apre una nuova finestra Terminale, si avvia bash, che esegue diversi script di avvio: /etc/profileAND ~/.bash_profileOR (se non esiste) ~/.bash_loginOPPURE (se neanche quello esiste) ~/.profile. Questi script configurano l'ambiente shell, incluso $PATH.

Una delle cose da /etc/profilefare è eseguire /usr/libexec/path_helper, che legge /etc/pathse contiene tutti i file /etc/paths.de aggiunge il loro contenuto a $PATH. Ma questo è solo un punto di partenza; il tuo script di avvio (se presente) può aggiungere $PATH, modificarlo, sostituirlo completamente, ecc.

Mi sembra che lo script di avvio (e / o le cose che esegue) stia aggiungendo un numero di voci al set di base da cui proviene /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" viene aggiunto all'inizio di $PATH(nel senso che verranno ricercate per prime quelle directory) e ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "è aggiunto alla fine. Se vuoi sapere esattamente cosa li sta aggiungendo, devi guardare lo script di avvio.

A proposito, questo processo per l'installazione $PATHsi applica solo alle shell "login" di bash. Qualsiasi cosa gestita da una shell bash erediterà $PATHda essa, quindi probabilmente ha essenzialmente la stessa cosa. bash le shell non di accesso seguono un processo di installazione leggermente diverso. Altre shell e cose che non sono affatto iniziate da una shell (ad es. Cron job) potrebbero avere completamente diverse $PATHs.


Si noti che per le shell non di accesso (ad /usr/local/bin/bashesempio installate da brew, senza l' -largomento), /usr/libexec/path_helpernon viene utilizzato e /usr/local/binnon è incluso per impostazione predefinita in $PATH. Per utilizzare path_helperin uno script o in modo interattivo, il comando è eval $(/usr/libexec/path_helper).
Kyle Strand

0

I primi posti in cui vorrei verificare le modifiche sono:

~/.profile
~/.bashrc
~/.bash_profile

Se stai usando qualcosa che non è Bash, controlla i file di configurazione per vedere qualsiasi menzione di PATH.

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.