我有一个简单的问题,了解在Linux中的行为。 简而言之,在Linux上,如果我从'桌面快捷方式'调用我的sh脚本,那么脚本无法看到最新的环境variables(在bashrc中设置)。 所以我想知道这个shell脚本在哪个范围内?
创build一个testing用例并重现:
创build一个简单的shell脚本“testme.sh”:
!/ bin / sh的 回声“嗨这是一个testing脚本检查env var”; 回声“TESTVAR = $ TESTVAR”; 读入 回声“完成”;
为上面的脚本创build一个桌面快捷方式。
cd〜/桌面 vi mytest-desktop.desktop // mytest-desktop.desktop的内容是: [桌面条目] 版本= 1.0 types=应用 NAME = TestAbhishek EXEC = /家庭/阿布舍克/testing/ hello.sh terminal=真
导出TESTVAR = test_this_variable
打开一个全新的terminal并使用它的完整path(如〜/ testme.sh)来执行脚本//这可以从.bashrc文件中看到variables'TESTVAR'的值。
现在,只需双击并执行桌面快捷方式。 //这将打开一个terminal并将“TESTVAR”的值打印为空白。 //所以我的问题是,这个快捷方式打开的terminal是谁?
我在RHL上试过这个。 我正在寻找一个解决scheme或AW / A这个问题,希望有人可以尽快帮助。
谢谢,阿布舍克
请参阅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