【发布时间】:2015-10-31 12:40:48
【问题描述】:
我在/usr/local/scripts/ 中放了一个自定义命令(shell 脚本)。
为了查看来自/usr/local/scripts 的命令,我使用以下方法设置了 PATH:
-
sudo visudoDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/scripts" -
sudo nano /etc/profilePATH="$PATH:/usr/local/scripts" 导出路径
-
sudo nano /etc/login.defsENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/scripts ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/usr/local/脚本
-
sudo nano /root/.bashrcPATH="$PATH:/usr/local/scripts" 导出路径
-
sudo nano /etc/environmentPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr /local/scripts"
这在大多数情况下都有效,但是...
我有两个脚本,在他们的代码中,从/usr/local/scripts/ 调用一个脚本,但它找不到我的脚本!
第一个是/etc/network/if-up.d/sendip,在初始化网络堆栈时以root身份运行。
第二个是/usr/local/scripts/notif-login,它是由/etc/pam.d/sshd从pam以root身份运行的:
session optional pam_exec.so /usr/local/scripts/notif-login
如果我从我的终端 shell 运行这两个脚本,另一个用户使用 sudo,没有 sudo,在 su 之后,或者使用 root 登录,它可以正常工作。但是当它被系统运行时(第一次是网络初始化时,第二次是通过 SSH)都无法从/usr/local/scripts 运行脚本。
还有其他需要设置路径的地方吗?
【问题讨论】:
-
为什么不直接使用完整路径?
-
因为我想知道如果他们的目录在路径中,为什么没有完整路径就不能工作