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.