Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8887773
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T21:53:31+00:00 2026-06-14T21:53:31+00:00

I’m encountering an issue where a command (a drush profile, to be exact) needs

  • 0

I’m encountering an issue where a command (a drush profile, to be exact) needs to be run within a created directory automatically. I can’t find much advisement within the script itself running it as an argument, and the logic i’ve been instructed by my superiors seems to suggest this as the best approach.

Here is what the bash script does:

  • It creates the directory structure and some Apache2 files for a Drupal install
  • It creates a rudimentary Drush profile that is then used by the utility to
  • Autoinstall Drupal and modules by running the alias “standardprofile” within a directory containing this profile file

The actual commands I use to run the script from Bash (full scripts below) are

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

The above lines don’t run the script (or anything past the first starting line, and then then bash script resumes) Is there a better way to instruct a bash script to run a command from the specified directory and then resume once any other utilities being run in the foreground finish?

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

And the drush script

#!/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);
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T21:53:33+00:00Added an answer on June 14, 2026 at 9:53 pm

    Is there a better way to instruct a bash script to run a command from the specified directory and then resume once any other utilities being run in the foreground finish?

    Sure:

    ( cd $dir && cmd )
    

    will run cmd from the specified directory. Since the two commands are run in a subshell, the script will resume in its present directory when the subshell completes.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I would like to run a str_replace or preg_replace which looks for certain words
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
I'm trying to convert HTML to plain text. I get many &\#8217; &\#8220; etc.
Seemingly simple, but I cannot find anything relevant on the web. What is the
Does anyone know how can I replace this 2 symbol below from the string
I am using Paperclip to handle profile photo uploads in my app. They upload
Let's say I'm outputting a post title and in our database, it's Hello Y&#8217;all
I have a .ini file as follows: [playlist] numberofentries=2 File1=http://87.230.82.17:80 Title1=(#1 - 365/1400) Example

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.