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

コメントで述べたように、スクリプトはサブシェルで実行されるため、ディレクトリは変更されません。.スクリプトを使用、インポート、または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たとえば、アカウントに追加できます。また、内部的に引用符を持たない変数を使用すると[ ]エラーが発生しやすくなります。

関連情報