Linux $ PATH对于同一用户而言有所不同,具体取决于访问方式

时间:2019-05-30 04:09:49

标签: php linux cron environment-variables

我在服务器的cronjob中运行着一个php脚本。

但是,我意外地从同一用户那里获得了不同的$ PATH,这取决于我执行命令的方式。

我以用户ubuntu的身份登录:

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

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运行的cronjob中执行脚本,并将以下调试输出到日志文件:

$ whoami
bitbucket

上面证明用户是位桶,然后:

$ echo $PATH
/usr/bin:/bin

请注意,我没有以sudo身份运行。我正在使用sudo切换用户,但没有使用sudo到echo $PATH

同一用户如何拥有2个不同的$ PATH变量?

1 个答案:

答案 0 :(得分:0)

您没有说您正在使用哪个shell,所以我假设它是bash。首先要指出的,也许是最重要的一点是,当您运行sudo su bitbucket时,会得到一个交互式shell。这意味着〜/ .bashrc 将作为源。很多人在该脚本中修改PATH。容易引起问题的事物。为什么?因为非交互式shell(例如cron为运行您的命令而启动的shell)不会读取〜/ .. bashrc

您的cron作业获得的路径等同于运行以下命令:sudo su bitbucket -c 'echo $PATH'。尝试一下,以更好地了解其工作原理。例如,尝试使用echo $PATH而不是env