【发布时间】:2012-06-26 14:07:33
【问题描述】:
我正在尝试设置一个基于 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 个参数,第二个参数是要结帐的分支的名称)时,其内容是:
#!/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 命令发送的命令时,复制该确切内容并通过以 root 身份登录的终端运行它,它工作得很好,执行结帐并返回新激活的分支的名称。
对此的任何提示将不胜感激。我的机器非常标准,Ubuntu 10.04 并运行 Apache2。
谢谢!
【问题讨论】:
-
将标准错误重定向到标准输出,然后重试:
exec($command . ' 2>&1') -
那太不安全了。想象
$repo是; rm -rf *