"which"命令在 PHP 中不起作用



我有两个远程服务器,它们需要同步某个代码库。我在第一个上设置了所有内容,但在第二个上设置时,我遇到了一个问题:

他们没有在同一位置安装hg。我不能只运行hg <command>,因为它返回错误:

sh:hg:找不到命令

所以我一直在使用完整路径,但这对两个单独的hg位置不起作用。

我认为运行which hg并使用响应的路径会很聪明,所以下面是新代码:

$hg = trim(`which hg`, "n");
$output = `{$hg} pull -u`

但是$hg就是NULL,所以这不起作用!我可以ssh到第二台服务器,并看到which hg确实可以工作。我甚至附加了2>> path/to/log,看看which命令是否有任何错误,但没有。我确定它是在写日志,所以它与此无关。

我不是在安全模式下运行的,而且我肯定被允许运行shell_exec,因为其他命令都可以工作。

我知道我可以创建一个符号链接,这样他们就有了相同的路径,只需硬编码路径,但shell_exec('which hg')不起作用的原因让我抓狂!!!

which hg只有在hg已经在您的路径中时才会工作,否则它将返回空字符串。

显然,这不是您想要的,因为如果它已经在您的路径上,您可以使用hg

如果您使用许多具有不同配置的机器,您可以在主目录中创建一个bin目录,将其添加到路径中,并链接到该目录中所需的命令。这将允许您在所有机器上使用相同的命令。

对于PHP,您需要将其放在web服务器可访问的目录中(但最好放在文档根目录之外),除此之外,您还可以在那里使用相同的技术,提供创建链接的公共目录的绝对路径。

尝试

shell_exec('/usr/bin/which hg');

相反。可以不设置$PATH,这是which的典型位置

最新更新