1

When i run the script:

#!/bin/bash
DRUPAL_ROOT=$(drush status root --format=list)
if [ -z $DRUPAL_ROOT ]
then
  echo -e "Not exists Drupal core"
else
  echo $DRUPAL_ROOT
  cd $DRUPAL_ROOT
fi

Output:

# /right/drupal/root

But no change to path

If i run commands in terminal:

# DRUPAL_ROOT=$(drush status root --format=list)
# cd $DRUPAL_ROOT

Change OK

Any idea? Thanks.

2
  • More directly: unix.stackexchange.com/q/27139/117549 Commented Dec 11, 2017 at 19:10
  • 1
    The script will cd into the directory, and then terminate, leaving you in the shell (and working directory) in which you invoked the script, not the script's final working dorectory. This can be shown by adding a pwd line after the cd command. Commented Dec 11, 2017 at 19:10

1 Answer 1

2

As mentioned in the comments, scripts are executed in subshells, so it is for that reason why the directory does not change. You can source the script with . or source, or create a function for this:

drup_cd() {
   DRUPAL_ROOT=$(drush status root --format=list)
   if [[ ! $DRUPAL_ROOT ]]; then
     echo -e "Not exists Drupal core"
   else
     echo "$DRUPAL_ROOT"
     cd "$DRUPAL_ROOT"
   fi
}

You can add it to your .bashrc, for example. Also note that using unquoted variables inside [ ] is prone to errors.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.