1

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

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

sh:hg:找不到命令

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

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

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

但是$hgNULL,所以这行不通!我可以通过 ssh 进入第二台服务器,并且看到它which hg确实有效。我什至附加2>> path/to/log了该命令是否有任何错误which,但没有。我确保它正在写入日志,因此与此无关。

我没有在安全模式下运行,我绝对可以运行shell_exec,因为其他命令有效。

我知道我可以创建一个符号链接,这样它们都有相同的路径并且只是对路径进行硬编码,但这让我发疯了为什么shell_exec('which hg')不工作!!!

4

2 回答 2

4

which hg仅当hg已经在您的路径中时才有效,否则它将返回空字符串。

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

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

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

于 2012-10-06T07:55:35.357 回答
0

尝试

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

反而。$PATH可能没有设置,这是一个典型的位置which

于 2012-10-06T07:55:21.497 回答