我在 /usr/local/scripts/
中放了一个自定义命令(shell脚本) .
为了查看 /usr/local/scripts
中的命令,我使用以下方法设置PATH:
sudo visudo
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/scripts"
sudo nano /etc/profile
PATH =“$ PATH:/ usr / local / scripts”导出路径
sudo nano /etc/login.defs
ENV_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 /本地/游戏:在/ usr /游戏:在/ usr /本地/脚本
sudo nano /root/.bashrc
PATH =“$ PATH:/ usr / local / scripts”导出路径
sudo nano /etc/environment
PATH =“在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:在/ usr /本地/游戏:在/ usr /本地/脚本”
这在大多数情况下都适用,但......
我有两个脚本,在他们的代码中,从 /usr/local/scripts/
调用脚本,它找不到我的脚本!
第一个是 /etc/network/if-up.d/sendip
,它在初始化网络堆栈时以root身份运行 .
第二个是 /usr/local/scripts/notif-login
,它是从 pam
以 /etc/pam.d/sshd
为根运行的: /etc/pam.d/sshd
:
session optional pam_exec.so /usr/local/scripts/notif-login
如果我从我的终端shell运行这两个脚本,另一个用sudo,没有sudo的用户,su或root用户登录后,它可以正常运行 . 但是当它被系统运行时(首先是网络初始化,第二次通过SSH)都无法从 /usr/local/scripts
运行脚本 .
还有另一个我必须设置路径的地方吗?
1 回答
对于"non-interactive shells",Bash / sh不会读取
/etc/profile
,例如您提及的脚本运行的shell . 我'm not sure which distribution you'正在使用,但您应该只能将其添加到/etc/environment
的PATH
定义中 . Ob Ubuntu,例如:更改:
至:
Edit
这应该在Raspbian下工作;它在Debian下完成 . 如果没有,您可能只需要在其中一个脚本的开头修改路径 . 在Bash下,所有正常启动文件都不会执行非交互式会话 . 还可以尝试输出
$SHELL
并确保脚本在您认为的shell下运行 .