2010-12-18 20 views
7

我在理解Linux中的行爲時遇到了一個簡單問題。總之,在Linux上,如果我從'桌面快捷方式'調用我的sh腳本,那麼腳本無法看到最新的環境變量(在bashrc中設置)。所以我想知道這個shell腳本在哪個範圍內?.bashrc在從桌面快捷方式調用shell腳本時未讀取

要創建測試用例和複製:

  1. 創建一個簡單的shell腳本 '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」完整路徑執行腳本//這可以從.bashrc文件中看到變量'TESTVAR'的值。

  2. 現在,只需雙擊並執行桌面快捷方式。 //這將打開一個終端並將'TESTVAR'的值打印爲空白。 //所以我的問題是,誰是由這個快捷方式打開的終端的父母?

我在RHL上試過這個。 我正在尋找解決方案或w/a爲這個問題,希望有人可以儘快幫助。

謝謝, Abhishek。

回答

11

請參閱INVOCATION bash聯機幫助頁的一節。下面是一個摘錄

當bash被調用作爲交互式 登錄外殼,或作爲非交互 殼與--login選項,它 首先從文件讀出並執行命令 的/ etc /配置文件,如果該 文件存在。在讀取該文件後,它會查找〜/ .bash_profile, 〜/ .bash_login和〜/ .profile,並按 的順序讀取並執行命令 ,該命令從第一個存在並且是 可讀。當啓動shell時,可以使用--noprofile選項 ,以禁止此行爲。

當登錄shell退出時,bash會讀取 並執行文件 〜/ .bash_logout中的命令(如果存在)。

當交互式殼不是 登錄shell啓動時,bash讀取 並且如果該文件存在從〜/ .bashrc中, 執行命令。這可能是 通過使用--norc選項禁止。 --rcfile文件選項將強制 bash從文件而不是〜/ .bashrc讀取和執行命令 。

長話短說,如果你要非交互的shell的有一定的ENV乏設置,然後把它們放在~/.bash_profile而不是~/.bashrc

相關問題