简体   繁体   中英

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?

I am trying to setup a web-based portal through which we can checkout different branches of our Git repository through a simple click on a back-end panel.

So currently, I have /var/www/devportal which contains index.php , status.sh and checkout.sh

In index.php I do the following:

$repo = $_GET['repo'];
$command = 'sh status.sh ' . $repo;
$output = exec($command);
echo "<pre>$output</pre>";

The contents of status.sh are:

#!/bin/bash -e
if [ $# -ne 1 ]
then
    echo "Usage: `basename $0` <repo name>"
    exit 1
fi
cd /var/www/$1
git status

And this works just fine. The output echoed in PHP shows me the status of the current branch within /var/www/proj.

Now when I try to do the same thing (passing 2 parms this time with the second one being the name of the branch to checkout) with checkout.sh , who'se contents are:

#!/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

It doesn't work. Not only does it not work, I don't get diddly squat for an error message. There is no output. I know that the checkout.sh script works fine because when I echo the command that is being sent via PHP's exec command, copy that exact thing and run it via terminal logged in as root, it works just fine, does the checkout and returns the name of the newly activated branch.

Any tips on this would be greatly appreciated. My box is pretty standard, Ubuntu 10.04 and running Apache2.

Thanks!

exec fills $output with your command standart output, to show error (if any) add "2>&1" at the end of your command.

exec can also tell you the return value, try:

$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);

Oh jesus man. Don't do this. escapeshellarg exists for a reason

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM