Khi cố gắng chạy drush vào: Không có tập tin hoặc thư mục như vậy


7

Tôi đã đập đầu vào tường cả ngày để tìm hiểu tại sao Drush đột nhiên ngừng hoạt động.

Tôi đã cài đặt lại qua trình soạn thảo, đã thử các phiên bản khác nhau, luôn có cùng một lỗi.

Nếu tôi gõ which drushtôi nhận được /home/user/.composer/vendor/bin/drushlà chính xác.

Nếu tôi nhập sh -vx drushvào một nỗ lực để gỡ lỗi những gì đang xảy ra với tập lệnh, tôi sẽ nhận được kết quả sau:

#!/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, có lẽ một cái gì đó hào nhoáng được trả lại với uname -a? Phản hồi từ máy chủ của tôi là:

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

Không có vấn đề về quyền thư mục ... mọi thứ đều thuộc sở hữu của người dùng. Tôi hoàn toàn mất mát. Tôi đã thử drush 5, 6 và 7 - cùng một loại lỗi.

Máy chủ đang chạy Ubuntu 12.04.2 LTS


Câu trả lời:


4

Tôi đã gặp lỗi tương tự khi chạy các lệnh drush trên máy tính từ xa thông qua bí danh drush. Tôi có thể chạy trực tiếp các lệnh drush trên hệ thống từ xa mà không gặp vấn đề gì nhưng khi tôi cố gắng chạy chúng thông qua một bí danh drush (@remotesystem) tôi sẽ gặp lỗi này.

Tôi thấy rằng người dùng trên shell mặc định của hệ thống từ xa là sh và không bash. Bởi vì tệp cấu hình bash ~ / .bashrc chứa dòng thêm vị trí của drush vào đường dẫn, sh shell không thể tìm thấy drush vì ~ / .bashrc sẽ không được lấy bởi shell sh chỉ bằng bash.

Các hướng dẫn cài đặt drush trên trạng thái docs.drush.org :

Bây giờ hãy thêm Drush vào đường dẫn hệ thống của bạn bằng cách đặt xuất PATH = "$ HOME / .composer / nhà cung cấp / bin: $ PATH" vào ~ / .bash_profile (người dùng Mac OS) hoặc vào ~ / .bashrc (người dùng Linux) của bạn.

Bạn có thể kiểm tra xem shell hiện tại của bạn được đặt bằng cách chạy:

xuất khẩu

Điều này sẽ in một dòng với vỏ hiện tại của bạn trong đó như thế này:

khai báo -x SHELL = "/ bin / bash"

Trên Ubuntu shell mặc định là sh nhưng shell người dùng mặc định là bash. Điều này đã xảy ra khi cài đặt Ubuntu Server (không có GUI).

Để sửa lỗi này, thay đổi shell mặc định của bạn thành bash.

Đối với người dùng hiện tại chạy như sau để thay đổi shell mặc định:

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

Đối với người dùng trong tương lai, nếu bạn sử dụng useradd, hãy chỉnh sửa tập tin / etc / default / useradd (đừng quên tạo bản sao lưu). Thay đổi dòng:

CHIA SẺ = / bin / sh

đến

CHIA SẺ = / bin / bash

Điều này sẽ đặt bash làm vỏ cho người dùng mới được tạo.


Thật điên rồ. Nếu kịch bản có #!/usr/bin/env shthì nó cần phải shtương thích. Ghi đè SHELLở giữa phiên là hoàn toàn vô nghĩa.
tripleee

@tripleee Kịch bản shtương thích. Vấn đề là shell sh trong thông tin đăng nhập không tương tác không có drush trong đường dẫn của nó, nhưng shell bash có drush trong đường dẫn của nó. Một giải pháp khác là cấu hình đường dẫn cho sh shell để nó có thể tìm thấy drush trong một phiên không tương tác. Tôi chạy các lệnh bash khác không tương tác trên các máy chủ và thích sử dụng shell bash. Đó là lý do tại sao tôi làm theo cách này, tức là. thay đổi vỏ cho các phiên không tương tác.
frederickjh

Bạn vẫn còn bối rối. Các PATHbiến cho shlấy bối cảnh .profilecho vỏ đăng nhập, và thường được thừa hưởng bởi vỏ phi đăng nhập. Tuy nhiên, nếu thông tin đăng nhập của bạn không liên quan đến vỏ đăng nhập (như trường hợp của một số hệ thống cửa sổ), bạn sẽ phải khởi tạo `PATH, một cách riêng biệt ... hoặc chỉ sử dụng một đường dẫn được mã hóa cứng đến vị trí thực tế của lệnh bạn muốn chạy
tripleee

Giải pháp này không được chấp nhận. Nó không thể được sử dụng trong môi trường dùng chung hoặc trong tình huống mọi người không có quyền thay đổi vỏ mặc định. Tôi đã đăng một giải pháp liên quan đến việc sử dụng %drush-scripttrong path-aliases.
asiby


1

Không thể tìm thấy Drush do $ PATH không cung cấp đường dẫn đến nơi Drush đang ở, do đó, env: drush: No such file or directorykết quả là lỗi . Trong câu trả lời được chấp nhận đó là do một lớp vỏ khác được sử dụng, nhưng có những nguyên nhân và giải pháp khả thi khác ngoài điều đó.

Ví dụ, khi chạy Drush trên một trang web từ xa thông qua các bí danh Drush, có thể có vấn đề với SSH và bản chất không đăng nhập không tương tác của kết nối shell đó ... vì vậy, nếu $ PATH của bạn được xác định ~/.bash_profilevà nó không được tải , di chuyển định nghĩa $ PATH~/.bashrc có thể là một giải pháp trong trường hợp đó.


Điều này đã làm việc. Cảm ơn. Tôi đang sử dụng một môi trường chia sẻ, nơi thay đổi shell mặc định là không cần thiết. Ngoài ra, tôi không có quyền truy cập vào bất cứ điều gì bên ngoài thư mục $ HOME của tôi. Giải pháp được đề xuất bởi @alec đã có hiệu quả ngay lập tức.
asiby

Tuy nhiên, tôi đã tìm thấy một giải pháp có thể tốt hơn.
asiby

0

Nếu bạn tự tin rằng đường dẫn đến Drush là chính xác, hãy thử cho phép thực thi quyền nhị phân.

chmod a+x drush

Đúng - đường dẫn là chính xác và Drush có thể thực thi được.
jmking

0

Có thể là do kết thúc dòng dos. bạn có thể sửa chữa nó bằng cách chỉnh sửa tập tin này drush trong vim và thực hiện ": bộ ff = unix" với tham khảo từ câu hỏi của bạn trên github

Nếu liều dung dịch trên không hoạt động thì hãy thử điều này:

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

Ngoài ra, bạn có thể cần điều chỉnh cài đặt php.ini trước khi có thể sử dụng drush thành công. đây là tài liệu tham khảo


0

Trong trường hợp của tôi, tôi đã loại bỏ thư mục nhà cung cấp drush crom , và nó đã giúp.

Trong PATH của tôi đã có nhiều trường hợp của drush.


0

Để giải quyết vấn đề cụ thể này mà tôi cũng gặp phải, tất cả những gì bạn cần làm là cung cấp một drush-aliasescấu hình như trong ví dụ sau ...

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

Sau đó, bạn có thể cần xóa bộ nhớ cache bằng cách sử dụng drush cc drushvà thử lại.

Điều này làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.