2010-12-18 1 views
7

Linuxでの動作を理解するのは簡単な問題です。要するに、linux上で私が 'Desktop Shortcut'からshスクリプトを呼び出すと、スクリプトは最新の環境変数(bashrcで設定)を見ることができません。だから私はこのシェルスクリプトがどの範囲にあるのだろうかと思っていたのですか?デスクトップショートカットからシェルスクリプトを呼び出したときに.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. 変数
 
    export TESTVAR=test_this_variable 
  1. オープン真新しいターミナルと、それは「〜/ testme.sh」のような完全なパスです使用してスクリプトを実行を設定するには、あなたの.bashrcファイルを更新//これは.bashrcファイルから変数 'TESTVAR'の値を見ることができます。

  2. デスクトップのショートカットをダブルクリックして実行するだけです。 //端末を開き、 'TESTVAR'の値を空白として出力する必要があります。 //私の質問は、このショートカットによって開かれた端末の親は誰ですか?

これをRHLで試しました。 私はこの問題の解決法またはw/aを探しています。誰かがすぐに助けてくれることを願っています。

ありがとう、 Abhishek。

答えて

11

bashのマンページのINVOCATIONのセクションを参照してください。ここに抜粋がある

のbashが対話的な ログインシェルとして起動され、または--loginオプション付きの非対話 シェルとして、それはファイルからコマンド を最初に読み込んで実行 ときに/ etc /プロファイル、その場合 ファイルが存在します。このファイルを読み取った後、 は、 の順番で〜/ .bash_profile、 〜/ .bash_login、〜/ .profileを探し、存在する最初のものから の読み取り可能なコマンド を読み取り実行します。シェルが起動されたときに--noprofileオプションを とすると、この動作を抑制するために、 を使用することがあります。

ログインシェルが終了すると、bashは を読み込み、ファイル 〜/ .bash_logout(存在する場合)からコマンドを実行します。

ログインシェル ではありませんインタラクティブシェルが起動されると、bashは を読み取り、そのファイルが存在する場合は〜/ .bashrcに、 からコマンドを実行します。これは--norcオプションを使用して を禁止することができます。 --rcfile fileオプションを指定すると、 bashは、〜/ .bashrcではなく、ファイルからコマンド を読み込んで実行します。あなたは非対話型シェルのは、その後、特定のENVが設定VARS持っ~/.bashrc

の代わりに ~/.bash_profileに入れたい場合は

かいつまんで、

関連する問題