drushを実行しようとすると、「そのようなファイルやディレクトリはありません」


7

なぜDrushが突然機能しなくなったのかを理解するために、頭を壁にぶつけてきました。

私は作曲家を介して再インストールしました、異なるバージョンを試しました、いつも同じエラーです。

入力するwhich drushと、/home/user/.composer/vendor/bin/drushどちらが正しいかわかります。

私が入力した場合sh -vx drush、スクリプトで何が起こっているかデバッグする試みで、私は次のような出力が得られます。

#!/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")

えーと

わかりました、多分何か変なものが返されuname -aますか?私のサーバーからの応答は:

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

ディレクトリ権限の問題はありません...すべてはユーザーが所有しています。私は完全に途方に暮れています。私はdrush 5、6、7を試しました-それぞれに同じ種類のエラーがあります。

サーバーはUbuntu 12.04.2 LTSを実行しています


回答:


4

Drushエイリアスを介してリモートコンピューターでDrushコマンドを実行すると、同じエラーが発生しました。問題なくリモートシステムで同じdrushコマンドを直接実行できましたが、drushエイリアス(@remotesystem)を介して実行しようとすると、このエラーが発生します。

リモートシステムのデフォルトシェルのユーザーはbashではなくshであることがわかりました。bash設定ファイル〜/ .bashrcには、drushの場所をパスに追加する行が含まれているため、〜/ .bashrcはbashによってのみshシェルによって供給されないため、shシェルはdrushを見つけることができませんでした。

docs.drush.orgの上drushのインストール手順の状態:

ここで、export PATH = "$ HOME / .composer / vendor / bin:$ PATH"を〜/ .bash_profile(Mac OSユーザー)または〜/ .bashrc(Linuxユーザー)に配置して、Drushをシステムパスに追加します。

次のコマンドを実行すると、現在のシェルが何に設定されているかを確認できます。

エクスポート| grepシェル

次のように、現在のシェルを含む行を出力します。

宣言-x SHELL = "/ bin / bash"

Ubuntuでは、デフォルトのシェルはshですが、デフォルトのユーザーシェルはbashです。これはUbuntuサーバーのインストールで発生しました(GUIなし)。

これを修正するには、デフォルトのシェルをbashに変更します。

現在のユーザーは、次のコマンドを実行してデフォルトのシェルを変更します。

sudo -u <USERNAME> chsh -s /bin/bash

今後のユーザーのために、useraddを使用する場合は、/ etc / default / useraddスケルトンファイルを編集してください(ただし、バックアップを作成することを忘れないでください)。行を変更します。

SHELL = / bin / sh

SHELL = / bin / bash

これにより、作成された新しいユーザーのシェルとしてbashが設定されます。


それはクレイジーです。スクリプトがある場合は#!/usr/bin/env sh、それとsh互換性がある必要があります。SHELLセッションの途中での上書きは、とにかく完全に無意味です。
tripleee 2016年

@tripleeeスクリプトはsh互換性があります。問題は、非対話型ログインのshシェルのパスにdrushがありませんが、bashシェルのパスにdrushがあることです。別の解決策は、非対話型セッション中にドラッシュを検出できるようにshシェルのパスを構成することです。他のbashコマンドをサーバー上で非対話的に実行し、bashシェルを使用することを好みます。だからこそ、私はこのようにしています。非インタラクティブセッションのシェルを変更します。
frederickjh

あなたはまだ混乱しています。PATH以下のための変数をsh中に設定されている.profileログインシェルのため、通常は非ログインシェルによって継承されました。ただし、ログインにログインシェルが含まれない場合(一部のウィンドウシステムの場合のように)、「PATH」を個別に初期化するか、コマンドの実際の場所へのハードコーディングされたパスを使用する必要があります。実行したい。
tripleee

この解決策は受け入れられません。共有環境や、デフォルトのシェルを変更する権限がない人には使用できません。でを使用するソリューションを投稿し%drush-scriptましたpath-aliases
asiby

1

私の問題は、非対話型シェルで.bashrcが完全に処理されていないことが原因でした


1

$ PATHがDrushの場所へのパスを提供していないため、Drushが見つからないため、エラーが発生しenv: drush: No such file or directoryます。別のシェルが使用されていることが原因であると認められている回答では、これに加えて他の考えられる原因と解決策があります。

たとえば、Drushエイリアスを介してリモートサイトでDrushを実行する場合、SSHとそのシェル接続の非インタラクティブな非ログインの性質に問題がある可能性があります... $ PATHが定義さ~/.bash_profileれていてロードされない場合その場合、$ PATH定義を~/.bashrc移動することで解決できます。


これはうまくいきました。ありがとう。デフォルトのシェルを変更することは問題外である共有環境を使用しています。また、$ HOMEディレクトリー以外にはアクセスできません。@alecによって提案されたソリューションはすぐに機能しました。
asiby

しかし、私はより良い解決策を見つけました。
asiby

0

Drushへのパスが正しいことを確信している場合は、drushバイナリに実行権限を付与してみてください。

chmod a+x drush

はい-パスは正しく、Drushは実行可能です。
jmking 2014年

0

DOSの行末が原因である可能性があります。あなたはvimでこのファイルdrushを編集し、githubの質問からの参照で「:set ff = unix」を実行することで修正できます

上記の解決策が機能しない場合は、これを試してください:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

さらに、drushを正常に使用する前に、php.ini設定を調整する必要がある場合があります。こちらが参考


0

私の場合、drush crom ベンダーディレクトリを削除しました。

私のPATHには、drushの多くのインスタンスがありました。


0

私も抱えていたこの特定の問題を解決するにdrush-aliasesは、次の例に示すように構成を指定するだけです...

$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
  ),
);

その後、を使用drush cc drushしてキャッシュをクリアし、再試行する必要がある場合があります。

これでうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.