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

我有一个简单的问题,了解在Linux中的行为。 简而言之,在Linux上,如果我从'桌面快捷方式'调用我的sh脚本,那么脚本无法看到最新的环境variables(在bashrc中设置)。 所以我想知道这个shell脚本在哪个范围内?

创build一个testing用例并重现:

  1. 创build一个简单的shell脚本“testme.sh”:

     !/ bin / sh的
    回声“嗨这是一个testing脚本检查env var”;
    回声“TESTVAR = $ TESTVAR”;
    读入
    回声“完成”;
    
  2. 为上面的脚本创build一个桌面快捷方式。

     
     cd〜/桌面
     vi mytest-desktop.desktop 
    
    
     // mytest-desktop.desktop的内容是: 
     [桌面条目]
    版本= 1.0
    types=应用
     NAME = TestAbhishek
     EXEC = /家庭/阿布舍克/testing/ hello.sh
    terminal=真
    
  3. 现在更新你的.bashrc文件来设置variables
   导出TESTVAR = test_this_variable
   
  1. 打开一个全新的terminal并使用它的完整path(如〜/ testme.sh)来执行脚本//这可以从.bashrc文件中看到variables'TESTVAR'的值。

  2. 现在,只需双击并执行桌面快捷方式。 //这将打开一个terminal并将“TESTVAR”的值打印为空白。 //所以我的问题是,这个快捷方式打开的terminal是谁?

我在RHL上试过这个。 我正在寻找一个解决scheme或AW / A这个问题,希望有人可以尽快帮助。

谢谢,阿布舍克

Solutions Collecting From Web of "从桌面快捷方式调用shell脚本时,.bashrc不读取"

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

当bash作为交互式登录shell或者作为具有–login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取和执行命令(如果该文件存在)。 读取该文件后,它将按照该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在并读取的第一个中读取和执行命令。 当shell开始禁止这种行为时,可以使用–noprofile选项。

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

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

长话短说,如果你想让非交互式shell有一些ENV变量集,然后把它们放在~/.bash_profile而不是~/.bashrc