.bashrc не читается, когда сценарий оболочки вызывается из ярлыка на рабочем столе

У меня простая проблема с пониманием поведения в Linux. Короче говоря, в Linux, если я вызываю свой sh-скрипт из «Ярлыка на рабочем столе», скрипт не может видеть последние переменные среды (установленные в bashrc). Мне было интересно, в каком объеме находится этот сценарий оболочки?

Чтобы создать тестовый пример и воспроизвести:

  1. Создайте простой сценарий оболочки testme.sh:

    !/bin/sh
    echo "Hi This is a test script checking the env var";
    echo "TESTVAR = $TESTVAR";
    read in
    echo "Done";
    
  2. создайте ярлык на рабочем столе для приведенного выше сценария.

     
    cd ~/Desktop
    vi mytest-desktop.desktop 
    
    
    //Contents for mytest-desktop.desktop are : 
    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=TestAbhishek
    Exec=/home/abhishek/test/hello.sh
    Terminal=true
    
  3. Теперь обновите файл .bashrc, чтобы установить переменную
   export TESTVAR=test_this_variable
   
  1. Откройте новый терминал и выполните сценарий, используя его полный путь, например '~ / testme.sh' // Это может увидеть значение переменной 'TESTVAR' из файла .bashrc.

  2. Теперь просто дважды щелкните и запустите ярлык на рабочем столе. // Это должно открыть терминал и распечатать значение TESTVAR как пустое. // Итак, мой вопрос: кто является родительским для терминала, открытого с помощью этого ярлыка?

Я пробовал это на БРЗ. Я ищу решение или ж / д для этой проблемы, надеюсь, кто-то скоро поможет.

Спасибо, Абхишек.


person Abhishek    schedule 18.12.2010    source источник


Ответы (1)


См. Раздел ВЫЗОВ на странице руководства bash. Вот отрывок

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, она сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После чтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первого, существующего и доступного для чтения. Параметр --noprofile может использоваться при запуске оболочки, чтобы запретить такое поведение.

Когда оболочка входа закрывается, bash читает и выполняет команды из файла ~ / .bash_logout, если он существует.

Когда запущена интерактивная оболочка, не являющаяся оболочкой входа, bash читает и выполняет команды из ~ / .bashrc, если этот файл существует. Это можно запретить с помощью параметра --norc. Параметр --rcfile file заставит bash читать и выполнять команды из файла вместо ~ / .bashrc.

Короче говоря, если вы хотите, чтобы в неинтерактивной оболочке были установлены определенные переменные ENV, поместите их в ~/.bash_profile вместо ~/.bashrc

person SiegeX    schedule 18.12.2010