系统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/environmentPATH定义中。 例如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下运行。

    链接地址: http://www.djcxy.com/p/56849.html

    上一篇: System Shell Scripts Can't Find my Command in PATH

    下一篇: Why doesn't "cd" work in a shell script?