系统Shell脚本无法在PATH中找到我的命令
我在/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”导出PATH
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”导出PATH
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
,它在初始化网络堆栈时以根用户身份运行。
第二个是/usr/local/scripts/notif-login
,它是通过/etc/pam.d/sshd
pam
/usr/local/scripts/notif-login
运行的。
session optional pam_exec.so /usr/local/scripts/notif-login
如果我运行脚本从我的终端shell,另一个用户,sudo,没有sudo,在su之后,或者用root登录,它可以正常工作。 但是当它由系统运行时(第一次在网络初始化时,第二次通过SSH时)都无法从/usr/local/scripts
运行/usr/local/scripts
。
有另一个地方,我必须设置路径?
Bash / sh不会读取“非交互式shell”的/etc/profile
,例如您提到的脚本运行的shell。 我不确定你正在使用哪种发行版,但你应该能够将它添加到/etc/environment
的PATH
定义中。 例如Ubuntu Ubuntu:
更改:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
至:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/scripts"
编辑
这应该在Raspbian下工作; 它在Debian下运行。 如果没有,您可能需要在一个脚本的开始处修改路径。 对于Bash下的非交互式会话,任何正常启动文件都不会执行。 另外尝试输出$SHELL
并确保脚本在您认为是的shell下运行。