首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux $PATH对于同一个用户是不同的,这取决于它的访问方式。

问Linux $PATH对于同一个用户是不同的,这取决于它的访问方式。
EN

Stack Overflow用户
提问于 2019-05-30 04:09:49
回答 1查看 306关注 0票数 0

我在服务器上的一个cron作业中运行了一个php脚本。

但是,根据执行命令的方式,我意外地从同一个用户获得了不同的$PATH。

我以用户ubuntu身份登录

代码语言:javascript
复制
ubuntu@:$ echo $PATH 
/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/.nvm/versions/node/v12.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

然后我sudo su bitbucket

代码语言:javascript
复制
bitbucket@:$ echo $PATH
/home/bitbucket/.nvm/versions/node/v12.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

我从运行为bitbucket的cron作业中执行一个脚本,并将以下调试输出到日志文件中:

代码语言:javascript
复制
$ whoami
bitbucket

以上证明用户是bitbucket,那么:

代码语言:javascript
复制
$ echo $PATH
/usr/bin:/bin

请注意,我不是像sudo那样跑步的。我使用sudo来切换用户,但不使用sudo到echo $PATH。

同一个用户怎么会有两个不同的$PATH变量?

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 23:48:14

您没有说明您使用的是哪个shell,所以我假设它是bash。首先,也是最重要的一点是,当您运行sudo su bitbucket时,您将得到一个交互式的shell。这意味着~/..bashrc将被来源于。很多人在这个脚本中修改PATH。容易引起问题的东西。为什么?因为非交互式shell,比如cron启动的运行命令的shell,不会读取~/..bashrc。

您的cron作业获得的路径相当于运行以下命令:sudo su bitbucket -c 'echo $PATH'。玩这个游戏,以更好地理解这是如何工作的。例如,不要使用echo $PATH,而是尝试env。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56371504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档