logo

Paleta - Deixe colorido🎨

Palette — Construtor visual de páginas. Não precisa ser designer.

Demonstração ao vivo Baixar Palette

Scroll

Drush mostra um erro: suporte do bash a 'source' usando $0 como alternativa caso não seja executado via bash

04/06/2025, by Ivan

Tenho uma enorme quantidade de configurações e normalmente executo a importação de configuração com php -d memory_limit=-1 (desativar o limite de memória do PHP):

php -d memory_limit=-1 ./vendor/bin/drush config-import -y

Mas, desta vez, recebi um erro:
 

# Suporte do bash para trabalhar com `source`, usando $0 como alternativa caso o script não seja executado via bash
# https://stackoverflow.com/a/35006505/6512
selfArg="$BASH_SOURCE"
if [ -z "$selfArg" ]; then
    selfArg="$0"
fi

self=$(realpath $selfArg 2> /dev/null)
if [ -z "$self" ]; then
    self="$selfArg"
fi

dir=$(cd "${self%[/\\]*}" > /dev/null; cd ../drush/drush && pwd)

if [ -d /proc/cygdrive ]; then
    case $(which php) in
        $(readlink -n /proc/cygdrive)/*)
            # Estamos no Cygwin, usando o php do Windows, então o caminho precisa ser convertido
            dir=$(cygpath -m "$dir");
            ;;
    esac
fi

export COMPOSER_RUNTIME_BIN_DIR="$(cd "${self%[/\\]*}" > /dev/null; pwd)"

# Se o bash carregar este arquivo via source, é preciso carregar também o script de destino
bashSource="$BASH_SOURCE"
if [ -n "$bashSource" ]; then
    if [ "$bashSource" != "$0" ]; then
        source "${dir}/drush" "$@"
        return
    fi
fi

"${dir}/drush" "$@"

Esse erro pode ser evitado passando memory_limit=-1 por meio de php-options:

./vendor/bin/drush --php-options='-d memory_limit=-1' config-import -y

Por que php -d memory_limit=-1 vendor/bin/drush … agora gera um erro

Quando você executa explicitamente o arquivo por meio do php, você diz ao interpretador PHP para executar um script bash:

php -d memory_limit=-1 ./vendor/bin/drush status

O PHP tenta obedientemente executar a primeira linha não-PHP (# Suporte do bash …) e falha imediatamente, exibindo na tela o código-fonte do wrapper. É exatamente essa a saída que você obteve. Essa mudança foi introduzida no Drush 13.3 e é discutida na issue de upstream “Running drush as php script fails after updating from 13.2.0”