Come impostare la directory relativa alla variabile PATH ed eseguire gli script nella relativa directory globalmente

0

Ho alcuni script in un progetto git che voglio accedere globalmente, quindi aggiungo il percorso relativo alla cartella scripts in questo modo

vim ~/.bash_profile
export PATH="~/git/scripts/:$PATH"
source ~/.bash_profile

e c'è un file ~/git/scripts/ chiamato echoHelloWorld.sh , quindi come posso eseguire echoHelloWorld.sh se sono ad esempio nella cartella ~/Downloads ? Faccio

cd ~/Downloads
./echoHelloWorld

perché l'ho provato, ma non funziona, e ho anche provato chmod +x echoHelloWorld.sh senza risultati.

    
posta the_prole 12.12.2018 - 00:25
fonte

3 risposte

1

TL; DR

L'istruzione del tuo percorso in ~/.bash_profile dovrebbe essere simile a questa:

PATH=$PATH:~/git/scripts/

Nozioni di base .....

Ci sono tre problemi nel modo in cui lo hai scritto:

  • Non utilizzare la funzione export poiché la variabile ( PATH ) è già nell'ambiente. Quando hai effettuato l'accesso, la variabile PATH è stata creata e impostata. Non è necessario export come già esiste.

  • Rimuovi le virgolette. Le doppie virgolette fanno letteralmente leggere il percorso in modo che l'espansione della directory home ~ non abbia mai luogo. Perché l'espansione della tilde funzioni, non può essere racchiusa tra virgolette. Se vuoi verificarlo, nella riga di comando digita quanto segue:

    $ PATH="~/git/scripts:$PATH"
    $ echo $PATH
    ~/git/scripts:/opt/local/bin:...                  <====== INCORRECT RESULT
    
    $ PATH=~/git/scripts:$PATH
    $ echo $PATH
     /Users/foouser/git/scripts:/opt/local/bin:.....  <====== CORRECT!
    
  • I percorsi tilde espansi (directory home personale) devono trovarsi al fine dell'istruzione del percorso. Il tuo percorso viene letto da sinistra a destra, prendendo la precedenza. In altre parole, se c'è un comando / funzione nella tua directory home con lo stesso nome di qualcosa già presente in PATH verrà prima eseguito (trovato) e potrebbe avere conseguenze non volute.

Una volta apportata la modifica al tuo ~/.bash_profile puoi riavviare la sessione o semplicemente eseguirla come hai fatto prima e le modifiche avranno luogo. Puoi confermare che ha funzionato emettendo (o entrambi) i seguenti comandi:

$ echo $PATH
$ which echoHelloWorld.sh

Il primo mostrerà PATH come impostato e il secondo ti dirà dove nel percorso ha trovato il tuo script.

    
risposta data 12.12.2018 - 12:13
fonte
1

Se hai aggiunto il percorso del file da eseguire alla variabile PATH , puoi eseguire il comando direttamente con

 echoHelloWorld.sh

indipendente dalla directory in cui ti trovi. Eseguirlo come ./echoHelloWorld.sh in realtà dice esplicitamente alla shell di ignorare PATH ed eseguire lo script dalla directory corrente (dove non è disponibile).

    
risposta data 12.12.2018 - 09:17
fonte
0
  1. Devi rendere eseguibile il comando.

    chmod +x echoHelloWorld.sh 
    # verify it worked.
    ls -l echoHelloWorld.sh 
    
  2. modifica il tuo profilo, che molto spesso è ~ / .bash_profile Aggiungi la directory alla tua variabile path.

    # some people recommend putting your scripts at the end of path. 
    # Less risk of you accidentally overriding a system file name.
    PATH="$PATH:${HOME}/git/scripts/"
    
  3. Mi piacerebbe chiudere la sessione. Non sai se lo script del tuo profilo vorrà essere eseguito due volte.

  4. inizia una nuova sessione

  5. eseguito da

    echoHelloWorld.sh
    

Ecco il mio esempio:

$ oneApp
-bash: oneApp: command not found
$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Developer/Tools:/Users/mac/.nexustools
$ export PATH="~/oneFile:$PATH"
$ echo $PATH
~/oneFile:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Developer/Tools:/Users/mac/.nexustools
$ oneApp
Running oneApp
$ cat oneApp
cat: oneApp: No such file or directory
$ cat ~/oneFile/oneApp 
#!/bin/bash
echo "Running oneApp"
$ 
    
risposta data 12.12.2018 - 05:19
fonte

Leggi altre domande sui tag