2013-12-10 13 views
7

Io uso uno script, test.sh, scritto da qualcun altro, la faccenda inizia con un bash:opzione faccenda Bash -l

#!/bin/bash -l 
... 
echo TEST: $TEST 

Da quello che ho potuto vedere, questo ha un effetto sulle variabili utilizzate all'interno dello script :

  • se corro TEST=hey ./test.sh, posso vedere TEST: hop, hop essendo il valore della variabile TEST nel mio .bash_profile
  • questo è lo stesso se io export TEST=hey prima di eseguire lo script
  • ma se mi tolgo la -l bandiera, lo stesso comando restituisce TEST: hey, come mi sarei aspettato

Qualcuno può spiegare questo comportamento? L'aiuto di bash non ha ... aiutato.

risposta

15

L'opzione -l (in base allo man page) rende "bash come se fosse stato invocato come shell di accesso". Le shell di login leggono alcuni file di inizializzazione dalla home directory, come .bash_profile. Poiché imposti il ​​valore di TEST nel tuo .bash_profile, il valore impostato sulla riga di comando viene sostituito quando viene avviato bash.

+0

OK, grazie! – Emmanuel