从桌面快捷方式调用shell脚本时,.bashrc文件未被读取

8
我有一个简单的问题,不理解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
//mytest-desktop.desktop的内容如下: [Desktop Entry] Version=1.0 Type=Application Name=TestAbhishek Exec=/home/abhishek/test/hello.sh Terminal=true 3. 现在更新您的.bashrc文件以设置变量。
export TESTVAR=test_this_variable 4. 打开全新的终端并使用完整路径执行脚本,例如'~/testme.sh'。这可以从.bashrc文件中查看变量'TESTVAR'的值。
5. 现在,只需双击并执行桌面快捷方式。这应该打开一个终端并将“TESTVAR”的值打印为空白。因此,我的问题是,由此快捷方式打开的终端的父级是谁?
我已经在RHL上尝试过这个问题。我正在寻找解决方案或解决此问题的方法,希望有人能尽快帮助。
谢谢, Abhishek.
1个回答

11
请参考bash手册中的INVOCATION部分。以下为摘录:
当bash作为交互式登录shell启动,或使用--login选项作为非交互式shell启动时,它首先读取并执行/etc/profile文件(如果该文件存在)。在读取完该文件后,它会按顺序查找~/.bash_profile、~/.bash_login和~/.profile,并从第一个存在且可读的文件中读取并执行命令。使用--noprofile选项可以在启动shell时禁止此行为。
当登录shell退出时,如果存在,bash会读取并执行~/.bash_logout文件中的命令。
当启动交互式shell但不是登录shell时,如果存在,bash会从~/.bashrc文件中读取并执行命令。这可以通过使用--norc选项来阻止。使用--rcfile file选项将强制bash从指定文件中读取并执行命令,而非从~/.bashrc文件中读取。
简而言之,如果想要为非交互式shell设置某些环境变量,请将它们放在~/.bash_profile中,而非~/.bashrc中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接