J'ai cogné ma tête contre le mur toute la journée en essayant de comprendre pourquoi Drush a soudainement cessé de fonctionner.
J'ai réinstallé via composer, essayé différentes versions, toujours la même erreur.
Si je tape which drush
J'obtiens /home/user/.composer/vendor/bin/drush
Qui est correct.
Si je tape sh -vx drush
Pour essayer de déboguer ce qui se passe avec le script, j'obtiens la sortie suivante:
#!/usr/bin/env sh
#
# This script is a simple wrapper that will run Drush with the most appropriate
# php executable it can find.
#
# Solaris users: Add /usr/xpg4/bin to the head of your PATH
#
+
: not found/.composer/vendor/bin/drush: 8: /home/user/.composer/vendor/bin/drush:
# Get the absolute path of this executable
SELF_DIRNAME="`dirname -- "$0"`"
+ dirname -- /home/user/.composer/vendor/bin/drush
+ SELF_DIRNAME=/home/user/.composer/vendor/bin
SELF_PATH="`cd -P -- "$SELF_DIRNAME" && pwd -P`/`basename -- "$0"`"
+ cd -P -- /home/user/.composer/vendor/bin
/home/user/.composer/vendor/bin/drush: 1: cd: can't cd to /home/user/.composer/vendor/bin
+ basename -- /home/user/.composer/vendor/bin/drush
+ SELF_PATH=/drush
+
: not found/.composer/vendor/bin/drush: 12: /home/user/.composer/vendor/bin/drush:
# Decide if we are running a Unix Shell on Windows
if `which uname > /dev/null 2>&1`; then
case "`uname -a`" in
/home/user/.composer/vendor/bin/drush: 15: /home/user/.composer/vendor/bin/drush: Syntax error: Word unexpected (expecting "in")
wut
Ok, peut-être que quelque chose de bizarre est retourné avec uname -a
? La réponse de mon serveur est:
Linux servername 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Il n'y a pas de problème d'autorisation de répertoire ... tout appartient à l'utilisateur. Je suis complètement perdu. J'ai essayé drush 5, 6 et 7 - même genre d'erreur dans chacun.
Le serveur exécute Ubuntu 12.04.2 LTS
J'obtenais cette même erreur lors de l'exécution des commandes drush sur un ordinateur distant via un alias drush. Je pouvais exécuter les mêmes commandes drush sur le système distant directement sans problème, mais lorsque j'essayais de les exécuter via un alias drush (@remotesystem), j'obtenais cette erreur.
J'ai trouvé que l'utilisateur sur le shell par défaut des systèmes distants était sh et non bash. Étant donné que le fichier de configuration bash ~/.bashrc contient la ligne qui ajoute l'emplacement de drush au chemin que le shell sh n'a pas pu trouver drush car ~/.bashrc ne sera pas fourni par le shell sh uniquement par bash.
Les instructions d'installation drush sur docs.drush.org indiquent:
Ajoutez maintenant Drush à votre chemin système en plaçant l'exportation PATH = "$ HOME/.composer/vendor/bin: $ PATH" dans votre ~/.bash_profile (utilisateurs Mac OS) ou dans votre ~/.bashrc (Utilisateurs Linux).
Vous pouvez vérifier la configuration de votre shell actuel en exécutant:
export | shell grep
Cela imprimera une ligne avec votre Shell actuel comme ceci:
declare -x Shell = "/ bin/bash"
Sur Ubuntu, le shell par défaut est sh mais le shell utilisateur par défaut est bash. Cela s'est produit lors d'une installation d'Ubuntu Server (pas d'interface graphique).
Pour résoudre ce problème, changez votre Shell par défaut en bash.
Pour les utilisateurs actuels, exécutez ce qui suit pour modifier le shell par défaut:
Sudo -u <USERNAME> chsh -s /bin/bash
Pour les futurs utilisateurs, si vous utilisez useradd, modifiez le fichier squelette/etc/default/useradd (n'oubliez pas de faire une sauvegarde cependant). Changez de ligne:
Coque =/bin/sh
à
Shell =/bin/bash
Cela définira bash comme Shell pour les nouveaux utilisateurs créés.
Drush est introuvable car $ PATH ne fournit pas le chemin d'accès à Drush, donc l'erreur env: drush: No such file or directory
résultats. Dans la réponse acceptée, cela est dû à l'utilisation d'un shell différent, mais il existe d'autres causes et solutions possibles en plus de cela.
Lors de l'exécution de Drush sur un site distant via des alias Drush, par exemple, il peut y avoir des problèmes avec SSH et la nature non interactive de non connexion de cette connexion Shell ... donc si votre $ PATH est défini ~/.bash_profile
et il ne se charge pas, déplacement de la définition de $ PATH vers ~/.bashrc
peut être une solution dans ce cas.
Mon problème était dû au fait que .bashrc n'était pas entièrement traité par des shells non interactifs https://stackoverflow.com/a/941995/980921
Pour résoudre ce problème spécifique que je rencontrais également, il vous suffit de fournir un drush-aliases
configuration comme indiqué dans l'exemple suivant ...
$aliases['prod'] = array (
'uri' => '...',
'root' => '...',
'remote-Host' => '...',
'remote-user' => '...',
'os' => '...',
'path-aliases' => array(
'%drush-script' => '/home/user/.composer/vendor/bin/drush', // <-- This is what you need
),
);
Après cela, vous devrez peut-être vider le cache à l'aide de drush cc drush
et essayez à nouveau.
Cela a fonctionné pour moi.
Cela peut être dû à des fins de ligne de dos. vous pouvez le corriger en éditant ce fichier drush dans vim et en exécutant ": set ff = unix" en référence à votre question sur github
Si la dose de solution ci-dessus ne fonctionne pas, essayez ceci:
Sudo mkdir /var/mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
En outre, vous devrez peut-être ajuster vos paramètres php.ini avant de pouvoir utiliser drush avec succès. voici le référence
Si vous êtes sûr que le chemin vers Drush est correct, essayez de donner la permission d'exécution à drush binaire.
chmod a+x drush
Dans mon cas, je supprime le drush du répertoire vendeur, et cela a aidé.
Dans mon CHEMIN, il y avait de nombreux cas de drush.