系统Shell脚本无法在PATH中查找我的命令

时间:2015-08-08 00:29:14

标签: linux bash shell root

我在/usr/local/scripts/中添加了一个自定义命令(shell脚本)。

为了查看来自/usr/local/scripts的命令,我使用以下方法设置PATH:

  1. sudo visudo

    Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/scripts"
    
  2. sudo nano /etc/profile

    PATH =" $ PATH:在/ usr /本地/脚本" 出口路径

  3. 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 /脚本

  4. sudo nano /root/.bashrc

    PATH =" $ PATH:在/ usr /本地/脚本" 出口路径

  5. sudo nano /etc/environment

    PATH =#&34;在/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:在/ usr /本地/游戏:在/ usr /本地/脚本"

  6. 这在大多数情况下都适用,但是......

    我有两个脚本,在他们的代码中,从/usr/local/scripts/调用脚本,它无法找到我的脚本!

    第一个是/etc/network/if-up.d/sendip,它在初始化网络堆栈时以root身份运行。

    第二个是/usr/local/scripts/notif-login,它是pam /etc/pam.d/sshdsession optional pam_exec.so /usr/local/scripts/notif-login 为根运行的:

    /usr/local/scripts

    如果我从我的终端shell运行这两个脚本,另一个用sudo,没有sudo的用户,su或root用户登录,它可以正常运行。但是当它被系统运行时(首先是网络初始化,第二次通过SSH)都无法从{{1}}运行脚本。

    还有其他地方需要设置路径吗?

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下运行。