【问题标题】:Default values of PATH variablePATH 变量的默认值
【发布时间】:2015-06-24 13:04:30
【问题描述】:

在互联网上搜索后,我知道在交互式/非交互式 - 登录/非登录 shell 组合的情况下在哪里更改 PATH 变量的值。

从另一个帖子找到

https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

我将“/bin/sh”作为默认登录 shell,并且仅使用 /etc/profile 文件来导出系统中所有需要的环境变量。在非交互式登录 shell 的情况下,/etc/profile 也不会被引用,即使上面的链接说它会。但是当我执行时,

ssh -4 -q -o StrictHostKeyChecking=no root@xxxx "env"
Password:
SHELL=/bin/sh
...
**PATH=/usr/bin:/bin:/usr/sbin:/sbin**
...

我可以看到 PATH 变量的一些默认值。我想知道 PATH 的这些默认值到底是在哪里设置的。

【问题讨论】:

    标签: linux shell environment-variables


    【解决方案1】:

    您根本不应该关心PATH 的设置位置。 您应该始终在您的shell 启动文件中设置PATH.profile.bashrc)。

    这样您就不必依赖其他人很快就会假设您的PATH 中应该包含哪些目录。唯一知道的是你。

    开始

    PATH=$(getconf PATH)
    

    然后根据自己的喜好添加

    PATH=$PATH:$HOME/bin
    PATH=$PATH:/usr/local/bin
    PATH=$PATH:<...any other directory you need...>
    

    PS:在您的具体情况下,看起来PATH 是从远程端的 SSH 守护程序继承而来的,该守护程序最终会分叉您的外壳。如果 shell 没有从其父级继承 PATH,它将设置一个默认值,您可以使用 env -i /bin/sh -c 'echo $PATH' 查询该值。

    【讨论】:

    • 感谢您的信息。但同样,我很想知道这个默认 PATH 的设置位置。我敢肯定,它不是来自远程端的 SSH 守护进程。我从我的开发环境到生产环境都是这样做的。开发环境的PATH值非常大,生产环境中大部分都是NA。我也尝试了你的第二种选择。即使那比我粘贴的还要多:(
    【解决方案2】:

    这取决于您的分布。在 Debian 及其衍生版本中,该定义位于 /etc/environment 中,并通过在适当的 /etc/pam.d/ 文件中包含 pam_env.so 将其读入当前会话。

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2011-08-27
      • 1970-01-01
      • 2013-07-27
      • 2011-09-22
      • 2014-12-15
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多