Il percorso non viene rispettato?

0

Ho il seguente in .bash_profile :

$ cat ~/.bash_profile 
# Prompt
export PS1="\h:\W$ "

# Standard path
export PATH="/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:
/opt/local/bin:/opt/local/sbin"

# Android
export ANDROID_NDK_ROOT=/opt/android-ndk
export ANDROID_SDK_ROOT=/opt/android-sdk
export JAVA_HOME='/usr/libexec/java_home'
export ANDROID_HOME="$HOME/.android"

export PATH="$PATH:$ANDROID_SDK_ROOT/tools/":"$ANDROID_SDK_ROOT/platform-tools/"

Ho verificato il percorso con:

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/opt/local/bin:
/opt/local/sbin:/opt/android-sdk/tools/:/opt/android-sdk/platform-tools/

La mia build locale di Emacs è in /usr/local/bin . L'ho appena installato e installato:

$ which emacs
/usr/local/bin/emacs

Quando eseguo Emacs, ottengo quello da /usr/bin :

$ emacs --version
GNU Emacs 22.1.1
...
$ /usr/bin/emacs --version
GNU Emacs 22.1.1
...
$ /usr/local/bin/emacs --version
GNU Emacs 24.5.1
...

Perché sto avendo problemi con i percorsi? Perché OS X li ignora? Come posso usare la mia copia di Emacs in /usr/local/bin/emacs senza specificando il percorso completo?

    
posta jww 04.02.2016 - 00:48
fonte

2 risposte

0

Ho scoperto che dovevo riavviare la macchina per fare in modo che le modifiche diventino effettive. Un logoff / logon potrebbe avere avuto lo stesso effetto, ma non l'ho provato.

    
risposta data 12.06.2017 - 11:21
fonte
1

Per modificare il PATH in modo che /usr/local/bin precede /usr/bin come segue:

  1. Esegui . ~/.bash_profile
  2. esegue PATH="/usr/local/bin:$PATH" nella shell corrente
  3. riavvia il terminale

Potresti anche voler modificare /etc/paths in modo che /usr/local/bin sia elencato prima di /usr/bin . Per fare ciò, devi eseguire il comando del tuo editore.

sudo open -t /etc/paths

Tieni presente che se modifichi /etc/paths , c'è il rischio che le applicazioni non terminali possano rilevare la versione di build locale. Solo FYI.

Un po 'più di informazioni sui percorsi.

  1. /bin (e /sbin ) erano destinati ai programmi che dovevano essere su una piccola partizione / prima che fossero montate le partizioni /usr più grandi, ecc. Al giorno d'oggi, serve principalmente come posizione standard per programmi chiave come /bin/sh , sebbene l'intento originale possa ancora essere pertinente per es. installazioni su piccoli dispositivi integrati.

  2. /sbin , come distinto da /bin , è per i programmi di gestione del sistema (normalmente non utilizzati dagli utenti ordinari) necessario prima del montaggio di /usr .

  3. /usr/bin è per programmi utente normali gestiti dalla distribuzione.

  4. C'è una /usr/sbin con la stessa relazione a /usr/bin come /sbin a /bin .

  5. /usr/local/bin è per i normali programmi utente non gestiti dal gestore di pacchetti di distribuzione, ad es. pacchetti compilati localmente. Non dovresti installarli in /usr/bin perché i futuri aggiornamenti di distribuzione potrebbero modificarli o eliminarli senza preavviso.

  6. /usr/local/sbin , come probabilmente puoi indovinare a questo punto, è a /usr/local/bin come /usr/sbin a /usr/bin .

Questa fonte ti aiuta a spiegare lo standard della gerarchia del file system a un livello più profondo.

Potresti trovare interessante anche questo articolo sull'uso e l'abuso di /usr/local/bin .

    
risposta data 04.02.2016 - 04:35
fonte

Leggi altre domande sui tag