1

特定のコードベースを同期させる必要がある 2 つのリモート サーバーがあります。最初にすべて設定しましたが、2 番目に設定しているときに問題が発生しました。

hgそれらは同じ場所にインストールされていません。hg <command>エラーが返されるため、実行できません。

sh: hg: コマンドが見つかりません

そのため、フルパスを使用していましたが、2 つの別々のhg場所では機能しません。

応答からのパスを実行して使用するのが賢明だと思ったwhich hgので、新しいコードを次に示します。

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

しかし、そうで$hgNULLありません。2 番目のサーバーに 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 に答える