Bash:从使用 sudo 运行的脚本调用时未找到 php 命令

Bash:从使用 sudo 运行的脚本调用时未找到 php 命令

我遇到了一个奇怪的问题。php在特定情况下找不到该命令。
我尝试以三种不同的方式调用该命令。其中只有一种失败:

  1. 作为用户,john我创建了一个调用的简单脚本php --version。然后以用户身份root像这样调用该脚本:sudo -u john ./script.sh
    这样php就找不到命令了。

  2. root直接像这样调用该命令:sudo -u john php --version
    这里没有问题,该命令确实存在。

  3. 我直接以用户“john”的身份调用该脚本:./script.sh
    它也运行良好。

是什么原因造成的?

这个问题不仅发生在其他用户身上john,也发生在这台特定的机器上。
操作系统是 CentOS 5.9。

编辑:此外,其他命令(例如gccperl或 )python不会出现此问题。php到目前为止,我发现只有 该命令存在此问题。

答案1

  1. 你的测试脚本缺少舍邦线。没有汤给你。
  2. 脚本调用的子 shell 未使用PATH与交互式 shell 相同的变量。键入echo $PATH以查看当前路径变量,并PATH在脚本中设置此变量。

至于为什么PATH两者之间的变量不一致:

  • 由于您没有指定 shebang 行,因此您无法确保所调用的 shell 与交互式 shell 相同。它可能获取完全不同的配置文件。
  • 根据 shell 的执行方式,获取的配置文件也不同。您位于交互式 shell 中,而您的脚本是非交互式 shell。假设您正在尝试使用bash,请查阅man bash并开始阅读INVOCATION文件顶部附近的部分。

相关内容