从桌面快捷方式调用shell脚本时,不会读取.bashrc

时间:2010-12-18 08:37:56

标签: linux bash redhat desktop-shortcut

我有一个简单的问题来理解linux中的行为。简而言之,在Linux上,如果我从“桌面快捷方式”调用我的sh脚本,则脚本无法看到最新的环境变量(在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文件以设置变量
  4.    
       export TESTVAR=test_this_variable
       
    1. 打开一个全新的终端并使用它的完整路径执行脚本,如'〜/ testme.sh'//这可以从.bashrc文件中看到变量'TESTVAR'的值。

      < / LI>
    2. 现在,只需双击并执行桌面快捷方式即可。 //这应该打开一个终端并将'TESTVAR'的值打印为空白。 //所以我的问题是,谁是这个快捷方式打开的终端的父级?

    3. 我在RHL上试过这个。 我正在为这个问题寻找解决方案或w / a,希望有人能尽快帮助。

      谢谢, 阿布舍克巴克。

1 个答案:

答案 0 :(得分:11)

请参阅bash联机帮助页的 INVOCATION 部分。这是一段摘录

  

当bash作为交互式调用时   登录shell,或作为非交互式   shell使用--login选项,它   首先读取并执行命令   从文件/ etc / profile,如果那样   文件已存在。看完那个文件后   它寻找〜/ .bash_profile,   〜/ .bash_login和〜/ .profile,在那里   命令,读取和执行命令   从第一个存在和是   可读。 --noprofile选项可以   在shell启动时使用   抑制这种行为。

     

当登录shell退出时,bash读取   并从文件中执行命令   〜/ .bash_logout,如果它存在。

     

当交互式shell不是   一个登录shell启动,bash读取   并执行来自〜/ .bashrc的命令,   如果该文件存在。这可能是   使用--norc选项禁止。   --rcfile文件选项将强制执行   bash读取和执行命令   从文件而不是〜/ .bashrc。

长话短说,如果您希望非交互式shell设置某些ENV变量,则将它们放入~/.bash_profile而不是~/.bashrc