2013-12-10 18 views
7

używam skryptu test.sh, napisany przez kogoś innego, zaczyna się shebang bash:Bash opcja shebang -l

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

Z tego co widzę, to ma wpływ na zmienne użyte wewnątrz skryptu :

  • jeśli biegnę TEST=hey ./test.sh widzę TEST: hop, hop jest wartość zmiennej TEST moim .bash_profile
  • jest to samo, jeśli I export TEST=hey przed uruchomieniem skryptu
  • ale jeśli usunąć -l flagi, te same polecenie zwraca TEST: hey, jak bym się spodziewał

Może ktoś proszę wyjaśnić to zachowanie? Pomoc basha nie ... pomogła.

Odpowiedz

15

Opcja -l (zgodnie z man page) powoduje, że "bash działa tak, jakby został wywołany jako powłoka logowania". Powłoki logowania odczytują określone pliki inicjujące z katalogu domowego, takie jak .bash_profile. Ponieważ ustawiłeś wartość TEST w swoim .bash_profile, wartość ustawiona w linii poleceń zostanie nadpisana po uruchomieniu bash.

+0

Dobra, dzięki! – Emmanuel