subtleseeker Asked: 2017-12-12 00:31:43 +0800 CST2017-12-12 00:31:43 +0800 CST 2017-12-12 00:31:43 +0800 CST 查找变量 $CDPATH 所在的路径? 772 只是出于好奇,有什么方法可以从其中回显诸如$PATH,之类的变量的文件$CDPATH? 第二个问题: bash 是如何知道这些变量的?是env吗?如果是这样,这是一个文件吗?可以添加这样的新自定义变量吗? environment-variables bash 1 个回答 Voted Best Answer Filip Nikolov 2017-12-12T04:19:29+08:002017-12-12T04:19:29+08:00 第一个问题的答案: $PATH 变量在登录时根据文件数构建,您看到的输出echo $PATH是合并结果的结果(保存在内存中)。 要查找在哪个文件中设置了 PATH 变量(可能会在多个文件中),您必须考虑登录时读取的文件。下面的列表可能会因发行版而异,但应该是一个很好的起点。 /etc/profile, /etc/profile.d/*, /etc/bashrc, /etc/environment, ~/.bashrc, ~/.bash_profile, ~/.bash_login, ~/.profile. 第二个问题的答案如上所述变量保存在内存中,您可以根据需要修改和添加新变量。例如添加到已定义的 PATH: [root@re ~]# PATH=$PATH:/opt/some/path [root@re ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/some/path 以上仅对当前会话有效。为了使其永久化,我需要将其添加到登录期间获取的文件之一。 假设我要添加 JAVA_HOME 并确保 java 二进制文件位于系统路径变量中。我将使用以下内容创建名为 /etc/profile.d/my-java-env.sh 的新文件。 [root@re ~]# cat /etc/profile.d/my-java-env.sh # Here we are adding java bin folder to existing path. PATH=$PATH:/usr/java/jdk1.8.0_20/bin # Here we are creating new variable pointing to JAVA_HOME JAVA_HOME=/usr/java/jdk1.8.0_20 为使以上生效重新登录。 $CDPATH默认情况下,在我使用的发行版(Ubuntu,CentOS)上,该变量为空(未设置),但同样的逻辑适用,如果已设置,那么这可能已在登录期间获取的文件之一中完成(如解释以上)。
第一个问题的答案: $PATH 变量在登录时根据文件数构建,您看到的输出
echo $PATH
是合并结果的结果(保存在内存中)。要查找在哪个文件中设置了 PATH 变量(可能会在多个文件中),您必须考虑登录时读取的文件。下面的列表可能会因发行版而异,但应该是一个很好的起点。
第二个问题的答案如上所述变量保存在内存中,您可以根据需要修改和添加新变量。例如添加到已定义的 PATH:
以上仅对当前会话有效。为了使其永久化,我需要将其添加到登录期间获取的文件之一。
假设我要添加 JAVA_HOME 并确保 java 二进制文件位于系统路径变量中。我将使用以下内容创建名为 /etc/profile.d/my-java-env.sh 的新文件。
为使以上生效重新登录。
$CDPATH默认情况下,在我使用的发行版(Ubuntu,CentOS)上,该变量为空(未设置),但同样的逻辑适用,如果已设置,那么这可能已在登录期间获取的文件之一中完成(如解释以上)。