Execute cd com variável de caminho no script bash que não funciona [duplicado]

1

Quando eu executo o 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

Saída:

# /right/drupal/root

Mas sem alteração no caminho

Se eu executar comandos no terminal:

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

Alterar OK

Alguma ideia? Obrigado.

    
por Mariano Gutiérrez 11.12.2017 / 20:07

1 resposta

2

Como mencionado nos comentários, os scripts são executados em subshells, portanto, é por esse motivo que o diretório não é alterado. Você pode criar o script com . ou source ou criar uma função para isso:

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
}

Você pode adicioná-lo ao seu .bashrc , por exemplo. Observe também que o uso de variáveis não nomeadas dentro de [ ] está sujeito a erros.

    
por 11.12.2017 / 20:15