Drush affiche une erreur : Supporter bash pour prendre en charge 'source' avec un repli sur $0 si cela ne s’exécute pas avec bash
J’ai un très grand nombre de configurations et j’exécute généralement l’import de configuration avec php -d memory_limit=-1
(désactivation de la limite mémoire pour PHP) :
php -d memory_limit=-1 ./vendor/bin/drush config-import -y
Mais cette fois, j’ai eu une erreur :
# Supporter bash pour prendre en charge `source` avec un repli sur $0 si cela ne s’exécute pas avec 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)/*)
# Nous sommes sous Cygwin utilisant PHP Windows, donc le chemin doit être traduit
dir=$(cygpath -m "$dir");
;;
esac
fi
export COMPOSER_RUNTIME_BIN_DIR="$(cd "${self%[/\\]*}" > /dev/null; pwd)"
# Si bash source ce fichier, il faut aussi sourcer la cible
bashSource="$BASH_SOURCE"
if [ -n "$bashSource" ]; then
if [ "$bashSource" != "$0" ]; then
source "${dir}/drush" "$@"
return
fi
fi
"${dir}/drush" "$@"
Vous pouvez éviter cette erreur en passant memory_limit=-1
comme option PHP :
./vendor/bin/drush --php-options='-d memory_limit=-1' config-import -y
Pourquoi php -d memory_limit=-1 vendor/bin/drush …
échoue maintenant
En forçant le fichier à passer via php
, vous dites à l’interpréteur PHP d’analyser un script bash :
php -d memory_limit=-1 ./vendor/bin/drush status
PHP essaie alors d’exécuter la première ligne non-PHP (# Support bash …
) et meurt immédiatement, affichant le contenu du wrapper à l’écran. C’est exactement ce que vous avez copié. Ce changement a été introduit dans Drush 13.3 et est discuté dans l’issue upstream « Running drush as php script fails after updating from 13.2.0 ».