首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从目录运行bash命令

从目录运行bash命令
EN

Stack Overflow用户
提问于 2012-11-25 22:04:13
回答 1查看 539关注 0票数 0

我遇到一个问题,需要在创建的目录中自动运行命令(准确地说,是drush配置文件)。我在脚本本身中找不到太多的建议,把它作为一个论据来运行,而上级指示的逻辑似乎表明这是最好的方法。

下面是bash脚本的功能:

  • 它为Drupal安装创建目录结构和一些Apache2文件。
  • 它创建了一个基本的钻孔配置文件,然后由该实用程序使用
  • 通过在包含此配置文件的目录中运行别名"standardprofile“来自动安装Drupal和模块

我用来从Bash运行脚本的实际命令(下面是完整的脚本)是

代码语言:javascript
复制
cd /var/www/$DOMAINNAME-dev.$URL
eval "standardprofile"

上面的行不运行脚本(或者在第一行之后再运行bash脚本),是否有更好的方法指示bash脚本从指定的目录运行命令,然后在前台完成时继续运行任何其他实用程序?

代码语言:javascript
复制
#!/bin/bash
# Creates the proper staging and development environment for a site

# Init
URL=example.com         #URL used in creating directories
OMIT_STAGING="n"        #Set to true if omitting staging
DOMAINNAME=""

###
# FUNCTIONS
###
function generate_empty_dirs {
    mkdir /var/www/$1-staging.$URL
    mkdir /var/www/$1-dev.$URL
    mkdir /var/www/$1-staging.$URL/logs
    mkdir /var/www/$1-staging.$URL/public_html
    mkdir /var/www/$1-dev.$URL/logs
    mkdir /var/www/$1-dev.$URL/public_html
}

function generate_drupal_staging_apacheconf {
    echo "<VirtualHost *:80>
            ServerAdmin webmaster@example.com
            ServerName $1-staging.$URL

            DocumentRoot /var/www/$1-staging.$URL/public_html
            <Directory /var/www/$1-staging.$URL/public_html>
                Options -MultiViews +ExecCGI
                Order allow,deny
                Allow from all

                RewriteEngine On
                RewriteBase /
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.php?q=\$1 [L,QSA]

            </Directory>

            LogLevel warn
            ErrorLog /var/www/$1-staging.$URL/logs/error.log
            CustomLog /var/www/$1-staging.$URL/logs/access.log combined
            # enable PHP error logging
            php_flag  log_errors on
            php_value error_log  /var/www/$1-staging.$URL/logs/php_errors.log
            # Possible LogLevel values include: debug, info, notice, warn, error, crit,
            # alert, emerg.

    </VirtualHost>" > /etc/apache2/sites-available/$1-staging.$URL
}

function generate_drupal_dev_apacheconf {
    echo "<VirtualHost *:80>
            ServerAdmin webmaster@example.com
            ServerName $1-dev.$URL

            DocumentRoot /var/www/$1-dev.$URL/public_html
            <Directory /var/www/$1-dev.$URL/public_html>
                Options -MultiViews +ExecCGI
                Order allow,deny
                Allow from all

                RewriteEngine On
                RewriteBase /
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.php?q=\$1 [L,QSA]

            </Directory>

            LogLevel warn
            ErrorLog /var/www/$1-dev.$URL/logs/error.log
            CustomLog /var/www/$1-dev.$URL/logs/access.log combined
            # enable PHP error logging
            php_flag  log_errors on
            php_value error_log  /var/www/$1-dev.$URL/logs/php_errors.log
            # Possible LogLevel values include: debug, info, notice, warn, error, crit,
            # alert, emerg.

    </VirtualHost>" > /etc/apache2/sites-available/$1-dev.$URL
}

function generate_wordpress_staging_apacheconf {
    echo "<VirtualHost *:80>
            ServerAdmin webmaster@example.com
            ServerName $1-staging.$URL

            DocumentRoot /var/www/$1-staging.$URL/public_html
            <Directory /var/www/$1-staging.$URL/public_html>
                Options -MultiViews +ExecCGI
                Order allow,deny
                Allow from all

                RewriteEngine On
                RewriteBase /
                RewriteRule ^index\.php$ - [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule . /index.php [L]

            </Directory>

            LogLevel warn
            ErrorLog /var/www/$1-staging.$URL/logs/error.log
            CustomLog /var/www/$1-staging.$URL/logs/access.log combined
            # enable PHP error logging
            php_flag  log_errors on
            php_value error_log  /var/www/$1-staging.$URL/logs/php_errors.log
            # Possible LogLevel values include: debug, info, notice, warn, error, crit,
            # alert, emerg.

    </VirtualHost>" > /etc/apache2/sites-available/$1-staging.$URL
}

function generate_wordpress_dev_apacheconf {
    echo "<VirtualHost *:80>
            ServerAdmin webmaster@example.com
            ServerName $1-dev.$URL

            DocumentRoot /var/www/$1-dev.$URL/public_html
            <Directory /var/www/$1-dev.$URL/public_html>
                Options -MultiViews +ExecCGI
                Order allow,deny
                Allow from all

                RewriteEngine On
                RewriteBase /
                RewriteRule ^index\.php$ - [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule . /index.php [L]

            </Directory>

            LogLevel warn
            ErrorLog /var/www/$1-dev.$URL/logs/error.log
            CustomLog /var/www/$1-dev.$URL/logs/access.log combined
            # enable PHP error logging
            php_flag  log_errors on
            php_value error_log  /var/www/$1-dev.$URL/logs/php_errors.log
            # Possible LogLevel values include: debug, info, notice, warn, error, crit,
            # alert, emerg.

    </VirtualHost>" > /etc/apache2/sites-available/$1-dev.$URL
}

function generate_drupal_drush_dev_profile {
    # Dev
    echo " <?php
    \$db_engine = 'mysql';
    \$db_name = '$1_db';
    \$db_user = '$1_user';
    \$db_pw = '1password';
    \$db_su = 'root';
    \$db_su_pw = '';
    \$site_name = '$1';
    \$account_name = 'admin';
    \$account_pw = 'example';
    \$account_mail = 'example@example.com';
    \$site_mail = \$account_mail;" > /var/www/$1-dev.$URL/installsettings.php
}

function generate_drupal_drush_staging_profile {
    #Staging
    echo " <?php
    \$db_engine = 'mysql';
    \$db_name = '$1_db';
    \$db_user = '$1_user';
    \$db_pw = '1password';
    \$db_su = 'root';
    \$db_su_pw = '';
    \$site_name = '$1';
    \$account_name = 'admin';
    \$account_pw = 'example';
    \$account_mail = 'example@example.com';
    \$site_mail = \$account_mail;" > /var/www/$1-staging.$URL/installsettings.php
}

function alter_group_owner {
    chown -R www-data /var/www/$1-staging.$URL
    chgrp -R www-data /var/www/$1-staging.$URL
    chown -R www-data /var/www/$1-dev.$URL
    chgrp -R www-data /var/www/$1-dev.$URL
    chown -R www-data /etc/apache2/sites-available/$1-staging.$URL
    chgrp -R www-data /etc/apache2/sites-available/$1-staging.$URL
    chown -R www-data /etc/apache2/sites-available/$1-dev.$URL
    chgrp -R www-data /etc/apache2/sites-available/$1-dev.$URL
}

###
# BEGIN MAIN LOGIC
###

# Checks to see if user is Root or is using Sudo, otherwise exit

if [ $(id -u) != 0 ]
then
    echo "You must have elevation to run this script."
    exit 1
fi

# Prompts for name of site
if [ -z "$1" ]
then
    read -p "Domain for the new site: " DOMAINNAME

    if [ ! -z $DOMAINNAME ]
    then
        echo "Generating the empty directories now..."
        generate_empty_dirs $DOMAINNAME
    else
        echo "You must provide a valid domain name"
        exit 1
    fi
else
    generate_empty_dirs $1
    DOMAINNAME=$1
fi

# Determine the kind of site being generated
read -p "Is this a (D)rupal or a (W)ordPress site? " SITETYPE
read -p "Do you need both the dev and staging sites? [Y/N] (case sensitive): " NEEDDIRS

    if [ -n "$SITETYPE" ]
    then
        if [ "$SITETYPE" == "D" ]
        then
            generate_drupal_dev_apacheconf $DOMAINNAME
            generate_drupal_drush_dev_profile $DOMAINNAME

            rm /var/www/$DOMAINNAME-dev.$URL/public_html
            rm /var/www/$DOMAINNAME-dev.$URL/logs

            cd /var/www/$DOMAINNAME-dev.$URL
            eval "standardprofile"

            if [ "$NEEDDIRS" == "Y" ] 
            then
                generate_drupal_staging_apacheconf $DOMAINNAME
                generate_drupal_drush_staging_profile $DOMAINNAME
                cd /var/www/$DOMAINNAME-staging.$URL
                eval "standardprofile"
                OMIT_STAGING="n"
            else
                OMIT_STAGING="y"
            fi
        elif [ "$SITETYPE" == "W" ]
        then
            generate_wordpress_dev_apacheconf $DOMAINNAME
            if [ "$NEEDDIRS" == "Y" ] 
            then
                generate_wordpress_staging_apacheconf $DOMAINNAME
                OMIT_STAGING="n"
            else
                OMIT_STAGING="y"
            fi
        else 
            echo "Invalid option provided"
            exit 1
        fi
    else
        echo "No option provided"
        exit 1 
    fi

alter_group_owner $DOMAINNAME

# Load the new confs into Apache

if [ "$OMIT_STAGING" == "y" ]
then
    a2ensite $DOMAINNAME-dev.$URL
    rm -rf /var/www/$DOMAINNAME-staging.$URL
else
    a2ensite $DOMAINNAME-dev.$URL
    a2ensite $DOMAINNAME-staging.$URL
fi

# Reload apache
service apache2 reload

# All done

echo "Sites created at domains:"
if [ "$OMIT_STAGING" == "y" ]
then
    echo $DOMAINNAME-dev.$URL
else
    echo $DOMAINNAME-dev.$URL
    echo $DOMAINNAME-staging.$URL
fi

exit
#End of script

还有钻孔的剧本

代码语言:javascript
复制
#!/usr/bin/env drush
$a = drush_get_arguments();
$current_directory = getcwd();
$profiles = substr($a[1], 0, strlen($a[1])-15) . 'standard.make';
if(file_exists($current_directory . '/installsettings.php')) {
  require_once($current_directory . '/installsettings.php');
}
drush_print("Time to prepare our site install...");

if(!file_exists('logs')) {
  drush_op_system('mkdir logs');
}

if(!file_exists('public_html')) {
  $prev = drush_get_context('DRUSH_AFFIRMATIVE');
  drush_set_context('DRUSH_AFFIRMATIVE', TRUE);
  drush_invoke('make', array($profiles, 'public_html'));
  drush_op_system('cp public_html/sites/all/modules/services/servers/rest_server/lib/spyc/spyc.php public_html/sites/all/modules/services/servers/rest_server/lib/spyc.php');
  #drush_shell_exec('cd public_html');
  #shell_exec('cd public_html');
  chdir('public_html');
  drush_invoke_process("@self","site-install",null,array(
    'db-url' => $db_engine . "://" . $db_user . ":" . $db_pw . "@localhost/" . $db_name,
    'account-name' => $account_name,
    'account-pass' => $account_pw,
    'account-email' => $account_mail,
    'db-su' => $db_su,
    'db-su-pw' => $db_su_pw,
    'site-mail' => $site_mail,
    'site-name' => $site_name,
    'clean-url' => FALSE,
  ));
    drush_invoke_process("@self","pm-enable",
        array('ctools', 'views', 'views_ui', 'features', 'strongarm', 'fe_block',
            'entity', 'token', 'module_filter', 'pathauto', 'devel', 'simplehtmldom',
            'services', 'rest_server', 'entity_token', 'date', 'date_api', 'date_tools',
            'date_views', 'date_popup','rules', 'rules_admin', 'views_slideshow',
            'views_slideshow_cycle', 'strongarm', 'diff', 'auto_nodetitle', 'libraries',
            'realname', 'views_php'),
        array('root' => $current_directory . '/public_html'));
  drush_set_context('DRUSH_AFFIRMATIVE', $prev);
}
EN

回答 1

Stack Overflow用户

发布于 2012-11-25 22:14:43

这应该是可行的:

代码语言:javascript
复制
cd /var/www/$DOMAINNAME-dev.$URL
/usr/bin/env drush "standardprofile"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13556026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档