![为什么 sudo su 和 bash 根脚本路径不同?](https://linux22.com/image/101857/%E4%B8%BA%E4%BB%80%E4%B9%88%20sudo%20su%20%E5%92%8C%20bash%20%E6%A0%B9%E8%84%9A%E6%9C%AC%E8%B7%AF%E5%BE%84%E4%B8%8D%E5%90%8C%EF%BC%9F%20.png)
管理员说明:这个问题与为什么 sudo 路径不同于 su 不同,因为从 cron 运行的 bash 脚本中的环境变量似乎不会从为用户设置为 sudo 或 su 的环境变量中继承。 (查看 BUT 之后的所有内容。)
运行 sudo su 并显示路径时,我的路径中有 /usr/local/bin 。我将几个自定义应用程序放入该文件夹中,目的是使它们在系统范围内可用。在 etc/sudoers 中,/usr/local/bin 位于 secure_path 中。
但
当通过 cron 作业运行以 root 身份执行的 bash 脚本时,/usr/local/bin 显然没有保留在路径中,因为在尝试运行安装在那里的应用程序时,我得到命令未找到,尽管它们位于 /etc 中/sudoers。
如何才能获得这些应用程序的 root 权限?
乌班图16.10
答案1
正如您所看到的,作业中的环境与or或cron
调用的 shell 中的环境不同。但是,您可以在 cron 表中设置变量:su -
sudo -s
sudo /path/to/executable
PATH="$PATH:/usr/local/bin"
0 0 * * * /path/to/run-me-at-midnight-with-path-changes.sh