簡體   English   中英

當使用php exec()運行shell腳本時,一個腳本工作(它只是git狀態)而一個腳本沒有(它執行git checkout)。 怎么會?

[英]When using php exec() to run shell scripts, one script works (which simply does git status) and one doesn't (which does git checkout). How come?

我正在嘗試設置一個基於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個parms,第二個是分支的名稱來結賬)時,他們的內容是:

#!/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使用命令標准輸出填充$ 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存在是有原因的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM