gpt4 book ai didi

php - 当使用 php exec() 运行 shell 脚本时,一个脚本可以工作(只执行 git status)而另一个不可用(执行 git checkout)。怎么会?

转载 作者:可可西里 更新时间:2023-11-01 01:05:54 25 4
gpt4 key购买 nike

我正在尝试设置一个基于 Web 的门户,通过它我们可以通过简单地单击后端面板来检查 Git 存储库的不同分支。

目前,我有/var/www/devportal,其中包含 index.phpstatus.shcheckout.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 个参数,第二个参数是要 checkout 的分支的名称)时,它的内容是:

#!/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 身份登录的终端运行它,它工作得很好,执行 checkout 并返回新激活分支的名称。

如有任何提示,我们将不胜感激。我的盒子非常标准,Ubuntu 10.04 并运行 Apache2。

谢谢!

最佳答案

exec 用您的命令标准输出填充 $output,以显示错误(如果有)在命令末尾添加“2>&1”。

exec 也可以告诉你返回值,试试:

$output = exec($command, $array_output, $ret_val);
var_dump($ret_val);
echo "<pre>$output</pre>";

关于php - 当使用 php exec() 运行 shell 脚本时,一个脚本可以工作(只执行 git status)而另一个不可用(执行 git checkout)。怎么会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com