Баш шебанг вариант-л


Я использую сценарий, test.sh, написанный кем-то другим, начинается с bash shebang:

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

Из того, что я мог видеть, это влияет на переменные, используемые внутри скрипта:

  • если я бегу TEST=hey ./test.sh, я могу видеть TEST: hop, hop будучи значением переменной TEST в моем .bash_profile
  • это то же самое, если я export TEST=hey перед запуском скрипта
  • но если я удалю флаг -l, та же команда вернет TEST: hey, как я и ожидал

Может ли кто-то пожалуйста, объясните это поведение ? Помощи от Баша не последовало... помощь.

1 9

1 ответ:

Опция -l (согласно man-странице ) заставляет "bash действовать так, как если бы он был вызван в качестве оболочки входа". Оболочки входа считывают определенные файлы инициализации из вашего домашнего каталога, например .bash_profile. Поскольку вы задаете значение TEST в вашем .bash_profile, значение, заданное в командной строке, переопределяется при запуске bash.