我正在尝试设置一个基于Web的门户,通过这个门户,我们可以通过简单的点击后端面板来检出我们的Git仓库的不同分支。
所以目前,我有/ var / www / devportal其中包含index.php , status.sh和checkout.sh
在index.php中,我执行以下操作:
$repo = $_GET['repo']; $command = 'sh status.sh ' . $repo; $output = exec($command); echo "<pre>$output</pre>";
status.sh的内容是:
#!/bin/bash -e if [ $# -ne 1 ] then echo "Usage: `basename $0` <repo name>" exit 1 fi cd /var/www/$1 git status
这工作得很好。 在PHP中回显的输出显示了/ var / www / proj中当前分支的状态。
现在当我用checkout.sh做同样的事情(这次传递2个参数,第二个参数是要检出的分支的名字),who'se的内容是:
#!/bin/bash -e if [ $# -ne 2 ] then echo "Usage: `basename $0` <repo name> <branch name>" exit 1 fi cd /var/www/$1 git checkout $2
它不起作用。 它不仅没有工作,我没有得到一个错误消息蹲下。 没有输出。 我知道checkout.sh脚本工作正常,因为当我呼应通过PHP的exec命令发送的命令,复制该确切的东西,并通过terminallogin作为根运行它,它工作得很好,结帐和返回新激活的分支的名称。
任何提示,将不胜感激。 我的盒子很标准,Ubuntu 10.04和运行Apache2。
谢谢!
exec用你的命令标准输出填充$ output,显示错误(如果有的话)在你的命令结尾添加“2>&1”。
exec还可以告诉你返回值,试试:
$output = exec($command, $array_output, $ret_val); var_dump($ret_val); echo "<pre>$output</pre>";
$repo = $_GET['repo']; $command = 'sh status.sh ' . $repo; $output = exec($command);
哦,耶稣的人。 不要这样做。 escapeshellarg存在的原因