【问题标题】:How do i call bash script function using exec function by passing parameter in php?如何通过在 php 中传递参数来使用 exec 函数调用 bash 脚本函数?
【发布时间】:2012-03-21 07:14:18
【问题描述】:

我创建了一个在 cpanel 中安装 magento 的 bash 脚本。但我对 exec 函数有疑问。

$function_path = Mage::getBaseDir()."/media/installer/function.sh"; 
exec("$function_path $db_host $db_name $db_user $db_pass $url $ad_user $ad_pass $ad_email");

在 exec 函数中,我传递了 shell 脚本创建和安装 Magento 数据库所需的所有参数。这是写在function.sh文件

中的bash shell脚本代码
#!/bin/bash

magento_detail $dbhost $dbname $dbuser $dbpass $url $admin_username $admin_password $admin_email
function magento_detail()
{

stty erase '^?'

echo "To install Magento, you will need a blank database ready with a user assigned to it."

echo -n "Do you have all of your database information"

dbinfo = "y"
echo $dbinfo 
if [ "$dbinfo" -eq 'y' ]
then
    echo "Database Host (usually localhost) : $dbhost "

    echo "Database Name : $dbname "

    echo "Database User : $dbuser "

    echo "Database Password : $dbpass "

    echo "Store Url : $url "

    echo "Admin Username : $admin_username "

    echo "Admin Password : $admin_password "

    echo "Admin Email Address : $admin_email "

    echo -n "Include Sample Data? (y/n) "

    echo sample = "y"

    if [ "$sample" -eq "y" ];
    then
        echo
        echo "Now installing Magento with sample data..."

        echo
        echo "Downloading packages..."
        echo

        wget http://www.magentocommerce.com/downloads/assets/1.5.1.0/magento-1.5.1.0.tar.gz
        wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz

        echo
        echo "Extracting data..."
        echo

        tar -zxvf magento-1.5.1.0.tar.gz
        tar -zxvf magento-sample-data-1.2.0.tar.gz

        echo
        echo "Moving files..."
        echo


        mv magento-sample-data-1.2.0/media/* magento/media/
        mv magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql magento/data.sql
        mv magento/index.php magento/.htaccess ./$test1

        echo
        echo "Setting permissions..."
        echo

        chmod o+w var var/.htaccess app/etc
        chmod -R o+w media

        echo
        echo "Importing sample products..."
        echo

        mysql -h $dbhost -u $dbuser -p$dbpass $dbname < data.sql

        echo
        echo "Initializing PEAR registry..."
        echo

         chmod 550 mage

        ./mage mage-setup .

        echo
        echo "Downloading packages..."
        echo

        echo
        echo "Cleaning up files..."
        echo

        rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*
        rm -rf magento/ magento-sample-data-1.2.0/
        rm -rf magento-1.5.1.0.tar.gz magento-sample-data-1.2.0.tar.gz data.sql
        rm -rf index.php.sample .htaccess.sample php.ini.sample LICENSE.txt STATUS.txt data.sql

        echo
        echo "Installing Magento..."
        echo

        php -f install.php --license_agreement_accepted "yes" --locale "en_US" --timezone "America/Los_Angeles"    --default_currency "USD" --db_host "$dbhost" --db_name "$dbname" --db_user "$dbuser" --db_pass "$dbpass" --url "$url"            --use_rewrites "yes" --use_secure "no" --secure_base_url "" --use_secure_admin "no" --admin_email "$admin_email"        --admin_username "$admin_username" --admin_password "$admin_password"

        echo
        echo "Finished installing Magento"
        echo

        exit
    else
        echo "Now installing Magento without sample data..."

        echo
        echo "Downloading packages..."
        echo

        wget http://www.magentocommerce.com/downloads/assets/1.5.1.0/magento-1.5.1.0.tar.gz

        echo
        echo "Extracting data..."
        echo

        tar -zxvf magento-1.5.1.0.tar.gz

        echo
        echo "Moving files..."
        echo

        mv magento/* magento/.htaccess .

        echo
        echo "Setting permissions..."
        echo

        chmod o+w var var/.htaccess app/etc
        chmod -R o+w media

        echo
        echo "Initializing PEAR registry..."
        echo

        chmod 550 mage

        ./mage mage-setup .

        echo
        echo "Downloading packages..."
        echo

        echo
        echo "Cleaning up files..."
        echo

        rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*
        rm -rf magento/ magento-1.5.1.0.tar.gz
        rm -rf index.php.sample .htaccess.sample php.ini.sample LICENSE.txt STATUS.txt

        echo
        echo "Installing Magento..."
        echo

        php -f install.php --license_agreement_accepted "yes" --locale "en_US" --timezone "America/Los_Angeles"          --default_currency "USD" --db_host "$dbhost" --db_name "$dbname" --db_user "$dbuser" --db_pass "$dbpass" --url "$url"            --use_rewrites "yes" --use_secure "no" --secure_base_url "" --use_secure_admin "no" --admin_email "$admin_email"            --admin_username "$admin_username" --admin_password "$admin_password"

        echo
        echo "Finished installing Magento else part"

        exit
    fi
else
    echo "Please setup a database first. Don't forget to assign a database user!"

    exit
fi
}`

我的问题是它没有执行脚本的所有命令,直接进入if条件的最后一步,打印"请先建立数据库,别忘了分配数据库用户!”。谁能告诉我,脚本跳过 if 部分并直接进入 else 部分?

【问题讨论】:

  • 你到底在执行什么shell?
  • 请发布您的命令和参数的连接执行字符串!
  • 你说你有问题,但你没有告诉我们是什么问题。然后你通过询问我们它是什么来复合它。所以我不得不怀疑。 . .你怎么知道你有问题?
  • 什么是“bash 脚本函数”?
  • @tereško 我正在使用 linux bash 脚本在 cpanel 中安装 magento。但是当我将参数从 php 文件传递​​到 bash 脚本时出现问题。

标签: php bash shell magento-1.7


【解决方案1】:

我想问题出在这条线
"$dbinfo" -eq 'y'

您不能使用 -eq 检查字符串,它仅适用于一元语句。
替换为
"$dbinfo" == "y"

它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-02-23
    • 1970-01-01
    • 2017-10-05
    • 2021-11-12
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多