我在/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 /本地/脚本" 出口路径
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 / local / games:/ usr / games:/ usr / local /脚本
sudo nano /root/.bashrc
PATH =" $ PATH:在/ usr /本地/脚本" 出口路径
sudo nano /etc/environment
PATH =#&34;在/ 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
以session optional pam_exec.so /usr/local/scripts/notif-login
为根运行的:
/usr/local/scripts
如果我从我的终端shell运行这两个脚本,另一个用sudo,没有sudo的用户,su或root用户登录,它可以正常运行。但是当它被系统运行时(首先是网络初始化,第二次通过SSH)都无法从{{1}}运行脚本。
还有其他地方需要设置路径吗?
答案 0 :(得分:1)
Bash / sh不会读取/etc/profile
"非交互式shell",例如您提到的脚本运行的shell。我不确定您使用的是哪个发行版,但您应该只能将其添加到/etc/environment
的{{1}}定义中。 Ob Ubuntu,例如:
变化:
PATH
要:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
修改强>
这应该在Raspbian下工作;它在Debian下完成。如果没有,您可能只需要在其中一个脚本的开头修改路径。在Bash下,所有正常启动文件都不会执行非交互式会话。还可以尝试输出PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/scripts"
并确保脚本在您认为的shell下运行。