Bash:当用sudo运行的脚本调用php命令时找不到

我有这个奇怪的问题。 php命令没有在一个特定的坐标中find。
我尝试以三种不同的方式调用命令。 其中只有一个失败:

  1. 作为用户john我创build了一个简单的脚本调用php --version 。 然后以root用户的身份调用这个脚本: sudo -u john ./script.sh
    这样php命令没有find。

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

  3. 我直接以用户'john': ./script.sh调用脚本
    它也能正常工作。

这是什么原因造成的?

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

编辑:另外,像gccperlpython其他命令不会出现这个问题。 php命令是我迄今发现的唯一一个问题。

  1. 你的testing脚本缺less一个shebang行 。 没有汤给你。
  2. 由脚本调用的子shell不使用与交互式shell相同的PATHvariables。 inputecho $PATH来查看当前的pathvariables,并在脚本中设置这个PATHvariables。

至于为什么PATHvariables在两者之间不一致:

  • 因为你没有指定shebang行,所以你不能保证被调用的shell和你的交互式shell是一样的。 它可能是完全采购不同的configuration文件。
  • 不同的configuration文件取决于shell的执行方式。 您位于交互式shell中,而您的脚本是非交互式shell。 假设您正在尝试使用bash ,请参阅man bash并在文件顶部附近的“ INVOCATION部分开始阅读。