Ich habe den ganzen Tag meinen Kopf gegen die Wand geschlagen, um herauszufinden, warum Drush plötzlich aufgehört hat zu arbeiten.
Ich habe über Composer neu installiert, verschiedene Versionen ausprobiert, immer den gleichen Fehler.
Wenn ich tippe, which drush
bekomme ich /home/user/.composer/vendor/bin/drush
was richtig ist.
Wenn ich sh -vx drush
versuche zu debuggen, was mit dem Skript passiert, erhalte ich die folgende Ausgabe:
#!/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, vielleicht wird etwas Wonky zurückgegeben uname -a
? Die Antwort von meinem Server lautet:
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
Es gibt keine Probleme mit der Verzeichnisberechtigung ... alles gehört dem Benutzer. Ich bin völlig ratlos. Ich habe versucht, Drush 5, 6 und 7 - jeweils die gleiche Art von Fehler.
Auf dem Server wird Ubuntu 12.04.2 LTS ausgeführt
Antworten:
Ich habe den gleichen Fehler erhalten, als ich Drush-Befehle auf einem Remotecomputer über einen Drush-Alias ausgeführt habe. Ich könnte die gleichen Drush-Befehle ohne Probleme direkt auf dem Remote-System ausführen, aber wenn ich versuchen würde, sie über einen Drush-Alias (@remotesystem) auszuführen, würde ich diesen Fehler erhalten.
Ich fand heraus, dass der Benutzer auf der Standard-Shell des Remote-Systems sh und nicht bash war. Da die Bash-Konfigurationsdatei ~ / .bashrc die Zeile enthält, die die Position von Drush zum Pfad hinzufügt, konnte die Sh-Shell Drush nicht finden, da ~ / .bashrc nicht nur von Bash von der Sh-Shell bezogen wird.
In den Anweisungen zur Installation von drush auf docs.drush.org heißt es :
Sie können überprüfen, auf was Ihre aktuelle Shell eingestellt ist, indem Sie Folgendes ausführen:
Dadurch wird eine Zeile mit Ihrer aktuellen Shell wie folgt gedruckt:
Unter Ubuntu ist die Standard-Shell sh, aber die Standard-User-Shell ist bash. Dies geschah bei einer Ubuntu Server-Installation (keine GUI).
Um dies zu beheben, ändern Sie Ihre Standard-Shell in Bash.
Führen Sie für aktuelle Benutzer Folgendes aus, um die Standard-Shell zu ändern:
Wenn Sie für zukünftige Benutzer useradd verwenden, bearbeiten Sie die Skelettdatei / etc / default / useradd (vergessen Sie jedoch nicht, ein Backup zu erstellen). Ändern Sie die Zeile:
zu
Dadurch wird bash als Shell für neue Benutzer festgelegt, die erstellt werden.
quelle
#!/usr/bin/env sh
, muss essh
-kompatibel sein. Das ÜberschreibenSHELL
mitten in einer Sitzung ist sowieso völlig sinnlos.sh
kompatibel. Das Problem ist, dass die sh-Shell in einem nicht interaktiven Login keinen Drush im Pfad hat, aber die Bash-Shell hat Drush im Pfad. Eine andere Lösung wäre, den Pfad für die sh-Shell so zu konfigurieren, dass sie während einer nicht interaktiven Sitzung Drush findet. Ich führe andere nicht interaktive Bash-Befehle auf Servern aus und bevorzuge die Bash-Shell. Deshalb mache ich es so, dh. Ändern Sie die Shell für nicht interaktive Sitzungen.PATH
Variable fürsh
wird.profile
für Login-Shells festgelegt und normalerweise von Nicht-Login-Shells geerbt. Allerdings, wenn Ihr Login keine Anmeldung beinhaltet Shell (wie es der Fall mit einigen Windowing - Systemen) Sie haben die `PATH' separat zu initialisieren ... oder einfach nur einen hartcodierten Pfad zum aktuellen Standort des Befehls verwenden Sie will rennen.%drush-script
in derpath-aliases
.Mein Problem wurde dadurch verursacht, dass .bashrc von nicht interaktiven Shells https://stackoverflow.com/a/941995/980921 nicht vollständig verarbeitet wurde
quelle
Drush kann nicht gefunden werden, da $ PATH nicht den Pfad zu Drush angibt, sodass der Fehler
env: drush: No such file or directory
auftritt. In der akzeptierten Antwort liegt dies daran, dass eine andere Shell verwendet wird, aber es gibt noch andere mögliche Ursachen und Lösungen.Wenn Sie beispielsweise Drush auf einer Remote-Site über Drush-Aliase ausführen, kann es zu Problemen mit SSH und der nicht interaktiven Nichtanmeldung dieser Shell-Verbindung kommen. Wenn also Ihr $ PATH definiert ist
~/.bash_profile
und nicht geladen wird Das Verschieben der $ PATH-Definition nach~/.bashrc
kann in diesem Fall eine Lösung sein.quelle
Wenn Sie sicher sind, dass der Pfad zu Drush korrekt ist, erteilen Sie die Ausführungsberechtigung für Drush-Binärdateien.
quelle
Möglicherweise wird es durch Dos-Line-Endungen verursacht. Sie können das Problem beheben, indem Sie diese Datei drush in vim bearbeiten und ": set ff = unix" unter Bezugnahme auf Ihre Frage zu github ausführen
Wenn die oben genannte Lösungsdosis nicht funktioniert, versuchen Sie Folgendes:
Darüber hinaus müssen Sie möglicherweise Ihre php.ini-Einstellungen anpassen, bevor Sie drush erfolgreich verwenden können. Hier ist die Referenz
quelle
In meinem Fall habe ich das Drush Crom Vendor Directory entfernt und es hat geholfen.
In meinem Pfad gab es viele Fälle von Drush.
quelle
Um dieses spezielle Problem zu lösen, das ich auch hatte, müssen Sie lediglich eine
drush-aliases
Konfiguration bereitstellen , wie im folgenden Beispiel gezeigt ...Danach müssen Sie möglicherweise den Cache mit löschen
drush cc drush
und es erneut versuchen.Das hat bei mir funktioniert.
quelle