Helpex - Trao đổi & giúp đỡ Đăng nhập
5

Tôi mới làm quen với lập trình và đang cố gắng làm theo một ví dụ sử dụng #! bình luận bằng ruby.

Tôi liên tục nhận được thông báo: bash: matz.rb: lệnh không tìm thấy

Tôi đang sử dụng bình luận này: #! / usr / bin / env ruby

Tôi đã thử nó có và không có khoảng trống sau khi! cũng như có và không có env.

khi tôi sử dụng $ mà ruby

ruby có trong: / usr / bin / ruby

Tôi cũng đã đi vào hệ điều hành và thay đổi quyền trên tệp matz.rb thành rwx cho tất cả người dùng mà không có hiệu lực. Tôi có đang làm gì sai hay hệ thống của tôi được thiết lập không chính xác không?

5 hữu ích 0 bình luận 2.3k xem chia sẻ
10

Một /usr/bin/envphần là ổn. Bạn cần cung cấp cho bash đường dẫn đến matz.rb khi bạn chạy nó. Nếu bạn đang ở trong thư mục có matz.rb, hãy nhập "./matz.rb". Cac thu mục "." có nghĩa là thư mục hiện tại - bash mặc định không xuất hiện ở đó khi chạy các chương trình (giống như Windows).

Chương trình env (/ usr / bin / env) tìm kiếm đường dẫn thực thi - biến môi trường PATH - cho rubychương trình như thể bạn đã nhập nó tại dấu nhắc lệnh và chạy chương trình đó. Bình luận shebang không làm được điều này. Nếu bạn muốn đưa tập lệnh của mình cho những người khác có thể không cài đặt ruby ​​ở cùng nơi với bạn, thì bạn nên sử dụng #!/usr/bin/env rubynhận xét "" để nó hoạt động miễn là họ có thể chạy ruby ​​bằng cách nhập "ruby".

10 hữu ích 0 bình luận chia sẻ
9

Nếu bạn đang ở trong cùng một thư mục với tệp matz.rb, hãy đảm bảo chạy nó dưới dạng

$ ./matz.rb

và không chỉ

$ matz.rb

Đây là một phiên trình bao chứng minh điều này hoạt động:

$ ls -la m*
-rwxr-xr-x  1 gareth  gareth  32  8 Jan 08:46 matz.rb
$ cat matz.rb
#!/usr/bin/env ruby
puts "Matz"
$ matz.rb
-bash: matz.rb: command not found
$ ./matz.rb
Matz
9 hữu ích 0 bình luận chia sẻ
3

Tệp của bạn không được tạo trên Windows phải không? Nếu nó có \ r \ n kết thúc dòng, điều đó sẽ làm khó chịu. Bạn có thể mở nó bằng Vim và kiểm tra:

vi matz.rb
:set ff=unix
:wq

Nếu khi bạn hoàn thành phần "ff =" bằng tab, nó thông báo dos, thì nó có định dạng tệp sai. Ngoài ra, hãy chạy dos2unix và thử chạy lại tệp:

apt-get install sysutils
dos2unix matz.rb
3 hữu ích 0 bình luận chia sẻ
2

Có vẻ như bạn đang sử dụng hệ thống Unix / Linux và chỉ cần gõ matz.rbvào dòng lệnh. Nếu bạn đang cố gắng thực thi một lệnh trong thư mục hiện tại, bạn cần gọi nó như ./matz.rb. "./" yêu cầu nó tìm trong thư mục hiện tại thay vì chỉ / usr / bin và bạn bè.

2 hữu ích 0 bình luận chia sẻ
1

Tôi không thấy bất kỳ câu trả lời nào cho biết bạn thay đổi chế độ thực thi của tệp, vì vậy bạn có thể muốn thử và làm

chmod +x matz.rb

trước khi bạn đi và thử làm

./matz.rb

Ngoài ra, tốt hơn là không nên đính kèm phần mở rộng .rb vào tệp, đó là trường hợp đối với các tập lệnh ruby ​​/ rails thông thường, ví dụ: script / create, script / console, v.v.

1 hữu ích 0 bình luận chia sẻ
1

Bạn có thể sử dụng dòng 'shebang' với:

#!/usr/bin/ruby
#!/usr/bin/env ruby

Nhưng tập lệnh cần phải được thực thi (bạn đã chỉ ra là như vậy) và trong trình bao $ PATH của bạn.

echo $PATH

Đặt tập lệnh vào một trong những thư mục đó hoặc sửa đổi đường dẫn của bạn, nếu không hãy chỉ định đường dẫn đầy đủ đến nó, ví dụ:

export PATH=$PATH:/home/user/bin

hoặc một trong những điều này:

./matz.rb
/home/user/bin/matz.rb

Bạn cũng có thể chạy trình thông dịch Ruby chuyển tên tệp script làm đối số và nó sẽ được thực thi. Điều này đặc biệt hữu ích nếu bạn đã cài đặt một phiên bản Ruby khác trên hệ thống của mình (giả sử để thử nghiệm, như Ruby Enterprise Edition, REE ):

/usr/bin/ruby matz.rb
/opt/ree/bin/ruby matz.rb
1 hữu ích 1 bình luận chia sẻ
0

Bạn đã thử ShaBang như sau để chỉ trực tiếp vào ruby ​​chưa?

#! /usr/bin/ruby

Sau đó, bạn gọi tập lệnh từ dòng lệnh là

./matz.rb

Trong hệ thống Unix / Linux, dấu chấm phía trước lệnh để tìm kiếm lệnh trong thư mục hiện tại. Nếu bạn cung cấp một đường dẫn như / usr / bin / ruby, nó sẽ tìm kiếm trong thư mục hiện tại cho một thư mục có tên là usr ...

Một lệnh không có dấu chấm / phía trước được tìm kiếm ở các vị trí được chỉ định bởi biến đường dẫn của môi trường.

Một lệnh có dấu / ở đầu được tìm kiếm chính xác từ thư mục gốc theo đường dẫn được chỉ định.

Bên trong ShaBang của bạn, bạn muốn chỉ định đường dẫn chính xác đến trình thông dịch để "/ usr / bin / ruby" là đường dẫn chính xác. Trên dòng lệnh, nơi bạn muốn tập lệnh của mình được thực thi, bạn cần gọi tập lệnh bằng "./matz.rb" nếu không bash sẽ tìm kiếm một lệnh như /usr/bin/matz.rb dẫn đến lỗi sai của bạn.

0 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ ruby , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading