2015-06-24 109 views
1

在互联网上搜索完成后,我知道在交互/非交互式 - 登录/非登录shell组合的情况下,应该在哪里更改PATH变量的值。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 [email protected] "env" 
Password: 
SHELL=/bin/sh 
... 
**PATH=/usr/bin:/bin:/usr/sbin:/sbin** 
... 

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

回答

1

您不应该在乎PATH的设置。您应始终在您的shell启动文件(.profile.bashrc)中设置PATH

这样你就不会依赖别人的很快无用的假设什么目录应该在你的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'来查询。

+0

感谢您的信息。但是,我很想知道这个默认PATH的设置。我相信,它不是来自远程端的SSH守护进程。我从我的开发环境转到了生产环境。开发环境具有非常巨大的PATH价值,大部分是生产环境中的NA。我也尝试过你的第二种选择。即使这比我粘贴的东西多:( –

0

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