我遇到了需要在创建的目录中自动运行命令(确切地说是 drush 配置文件)的问题。我在将其作为参数运行的脚本本身中找不到太多建议,而我的上级指示我的逻辑似乎表明这是最好的方法。
这是 bash 脚本的作用:
- 它为 Drupal 安装创建目录结构和一些 Apache2 文件
- 它创建一个基本的 Drush 配置文件,然后由实用程序用于
- 通过在包含此配置文件的目录中运行别名“standardprofile”来自动安装 Drupal 和模块
我用来从 Bash 运行脚本的实际命令(下面的完整脚本)是
cd /var/www/$DOMAINNAME-dev.$URL
eval "standardprofile"
上面的行不运行脚本(或超过第一行的任何内容,然后 bash 脚本恢复)是否有更好的方法来指示 bash 脚本从指定目录运行命令,然后在任何其他实用程序后恢复正在前台运行完成?
#!/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
还有 drush 脚本
#!/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);
}