在 bash 脚本中使用路径变量运行 cd 不起作用

在 bash 脚本中使用路径变量运行 cd 不起作用

当我运行脚本时:

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

输出:

# /right/drupal/root

但路径没有改变

如果我在终端中运行命令:

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

更改确定

任何想法?谢谢。

答案1

正如评论中提到的,脚本是在子 shell 中执行的,因此目录不会更改。您可以使用.或获取脚本source,或为此创建一个函数:

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
}

.bashrc例如,您可以将其添加到您的 中。另请注意,在内部使用不带引号的变量[ ]很容易出错。

相关内容