8

Linuxでの動作を理解するのに簡単な問題があります。つまり、Linux で「デスクトップ ショートカット」から sh スクリプトを呼び出すと、スクリプトは最新の環境変数 (bashrc で設定) を認識できません。だから私は、このシェルスクリプトがどの範囲にあるのか疑問に思っていましたか?

テストケースを作成して再現するには:

  1. 簡単なシェル スクリプト 'testme.sh' を作成します。

    !/ビン/sh
    echo "こんにちは、これは環境変数をチェックするテスト スクリプトです";
    echo "TESTVAR = $TESTVAR";
    読み込んだ
    echo "完了";
    
  2. 上記のスクリプトのデスクトップ ショートカットを作成します。

     
    cd ~/デスクトップ
    vi mytest-desktop.desktop
    
    
    // mytest-desktop.desktop の内容は次のとおりです。
    【デスクトップエントリー】
    バージョン=1.0
    タイプ=アプリケーション
    名前=テストアビシェーク
    Exec=/home/abhishek/test/hello.sh
    ターミナル=真
    
  3. .bashrc ファイルを更新して、変数を設定します。
   エクスポート TESTVAR=test_this_variable
   
  1. 新しいターミナルを開き、'~/testme.sh' のような完全なパスを使用してスクリプトを実行します。 //これにより、.bashrc ファイルから変数 'TESTVAR' の値を確認できます。

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

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

ありがとう、アビシェーク。

4

1 に答える 1

11

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

bashが対話型ログインシェルとして、または--loginオプションを指定した非対話型シェルとして呼び出されると、最初にファイル/ etc / profile(ファイルが存在する場合)からコマンドを読み取って実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、〜/ .profileの順に検索し、最初に存在して読み取り可能なコマンドからコマンドを読み取って実行します。--noprofileオプションは、シェルの起動時にこの動作を禁止するために使用できます。

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

ログインシェルではない対話型シェルが開始されると、bashは〜/ .bashrcからコマンドを読み取り、実行します(そのファイルが存在する場合)。これは、-norcオプションを使用することで禁止できます。--rcfile fileオプションは、bashに〜/.bashrcではなくfileからコマンドを読み取って実行するように強制します。

簡単に言うと、非対話型シェルに特定のENV変数を設定する場合は、~/.bash_profile代わりにそれらを配置します。~/.bashrc

于 2010-12-18T08:41:45.290 に答える