gpt4 book ai didi

linux - 系统 Shell 脚本无法在 PATH 中找到我的命令

转载 作者:太空狗 更新时间:2023-10-29 11:18:24 24 4
gpt4 key购买 nike

我在 /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/local/scripts"导出路径

  3. sudo nano/etc/login.defs

    ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/scriptsENV_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/local/scripts"导出路径

  5. sudo nano/etc/environment

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/本地/脚本”

这在大多数情况下都有效,但是......

我有两个脚本,它们在它们的代码中调用了来自 /usr/local/scripts/ 的脚本,但它找不到我的脚本!

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

第二个是 /usr/local/scripts/notif-login/etc/pam.d/sshd 从 pam 以 root 身份运行:

session optional pam_exec.so /usr/local/scripts/notif-login

如果我从我的终端 shell 运行这两个脚本,另一个用户,使用 sudo,不使用 sudo,在 su 之后,或者使用 root 登录,它都可以正常工作。但是当它由系统运行时(第一次是在网络初始化时,第二次是通过 SSH)都无法从 /usr/local/scripts 运行脚本。

还有其他地方我必须设置路径吗?

最佳答案

Bash/sh 不会读取“非交互式 shell”的 /etc/profile,例如您提到的运行脚本的 shell。我不确定您使用的是哪个发行版,但您应该能够将它添加到 /etc/environmentPATH 定义中。 Ob 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 下的非交互式 session 不会执行任何正常的启动文件。还可以尝试输出 $SHELL 并确保脚本在您认为的 shell 下运行。

关于linux - 系统 Shell 脚本无法在 PATH 中找到我的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com