为什么 sudo bash 与常规 bash 不同

为什么 sudo bash 与常规 bash 不同

问题描述:我正在使用一种叫做游戏框架在我的开发中需要我制作 python 脚本路径中可用。因此,我在在/usr/本地/bin...现在我已经编写了一个 shell 脚本(称之为状态文件) 调用此 python 脚本如下:play status <some values here related to my app> &> /tmp/xyz.txt然后此 shell 脚本通过电子邮件将文件发送给我。当我按如下方式执行脚本时,此方法完美运行./script.sh。但是,当每天将脚本作为 cron 表达式执行时,我会从 stderr 收到一条输出,提示“play:未找到命令”。

因此,我自己做了一些调查,以下是我的发现:

  1. echo $PATH当我在 shell 上时,显示我有在/usr/本地/bin因此我可以成功执行命令play status
  2. 然而当我输入sudo bash时,echo $PATH我没有路径在/usr/本地/bin不再。它是一组有限的文件夹(其中之一是/usr/bin)。

:为什么会出现这种情况?!我不明白为什么路径不同。另外,作为一种解决方法,您是否建议我这样做:

  • 新的符号链接来自/usr/bin在/usr/本地/bin(这有什么副作用?)
  • 消除在/usr/本地/bin符号链接,只使用/usr/bin
  • 在链接新程序并执行它们时是否存在我没​​有遵循的惯例$PATH

谢谢。

答案1

所有用户(包括 root)都有一组环境变量,每次打开新 shell 时都会应用这些环境变量。

对于普通用户,您可以通过编辑 ~/.bashrc 并在最后添加以下行来添加到现有路径:

PATH=$PATH:/mypath_to_my_files

对于 root 来说,我认为你必须编辑 /root/.bashrc。不过在这种情况下,确保全部用户在他们的路径中有这个,为此,您可以使用上面的编辑行,并将其放在文件 /etc/bash.bashrc 的末尾

答案2

我建议您简单地将符号链接移动到 /usr/bin。

相关内容