Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从桌面快捷方式调用shell脚本时未读取.bashrc_Linux_Bash_Redhat_Desktop Shortcut - Fatal编程技术网

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

Linux 从桌面快捷方式调用shell脚本时未读取.bashrc,linux,bash,redhat,desktop-shortcut,Linux,Bash,Redhat,Desktop Shortcut,我在理解linux中的行为时遇到了一个简单的问题。简而言之,在linux上,如果我从“桌面快捷方式”调用sh脚本,那么脚本将无法看到最新的环境变量(在bashrc中设置)。所以我想知道这个shell脚本位于什么范围 要创建测试用例并复制: 创建一个简单的shell脚本“testme.sh”: !/bin/sh echo "Hi This is a test script checking the env var"; echo "TESTVAR = $TESTVAR"; read in echo

我在理解linux中的行为时遇到了一个简单的问题。简而言之,在linux上,如果我从“桌面快捷方式”调用sh脚本,那么脚本将无法看到最新的环境变量(在bashrc中设置)。所以我想知道这个shell脚本位于什么范围

要创建测试用例并复制:

  • 创建一个简单的shell脚本“testme.sh”:

    !/bin/sh echo "Hi This is a test script checking the env var"; echo "TESTVAR = $TESTVAR"; read in echo "Done"; !/垃圾箱/垃圾箱 echo“嗨,这是一个检查环境变量的测试脚本”; echo“TESTVAR=$TESTVAR”; 读入 回应“完成”;
  • 为上面的脚本创建桌面快捷方式

    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 cd~/桌面 vi mytest-desktop.desktop //mytest-desktop.desktop的内容包括: [桌面输入] 版本=1.0 类型=应用程序 Name=TestAbhishek Exec=/home/abhishek/test/hello.sh 终端=真
  • 现在更新.bashrc文件以设置变量
  • 导出TESTVAR=test\u此变量
  • 打开一个全新的终端并使用它的完整路径执行脚本,如“~/testme.sh”//这可以从.bashrc文件中看到变量“TESTVAR”的值

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

  • 我在RHL上试过这个。 我正在寻找解决这个问题的方法,希望有人能尽快帮助我

    谢谢,
    阿披实。

    参见bash手册的调用部分。这里有一段摘录

    当bash作为一个交互函数调用时 登录shell,或作为非交互式 shell使用--login选项,它 首先读取并执行命令 从文件/etc/profile,如果 文件存在。在读了那个文件之后, 它查找~/.bash_配置文件, ~/.bash\u登录和~/.profile,在 命令,并读取和执行命令 从存在的第一个开始 可读的。--noprofile选项可能会 在外壳启动时使用 抑制这种行为

    当登录shell退出时,bash读取 并执行文件中的命令 ~/.bash\u注销(如果存在)

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

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

    export TESTVAR=test_this_variable