2010-06-27 35 views
10

Tôi có kịch bản sau đâydòng công việc không làm việc trong kịch bản R

#!/usr/bin/Rscript 

print ("shebang works") 

trong một tập tin gọi là shebang.r. Khi tôi chạy nó từ dòng lệnh sử dụng Rscript nó hoạt động

$ Rscript shebang.r 

nhưng khi tôi chạy nó từ dòng lệnh một mình

$ shebang.r 

Nó không làm việc. lệnh shebang.r không tìm thấy.

Nếu tôi gõ (dựa trên ví dụ khác mà tôi đã nhìn thấy)

$ ./shebang.r 

tôi nhận được sự cho phép từ chối.

Có, Rscript nằm trong thư mục/usr/bin

Trả lời

12

Làm cho tệp có thể thực thi được.

chmod 755 shebang.r 
+0

Đã hoạt động! Có các tùy chọn khác ngoài 755 hoạt động không? Tôi đang lên kế hoạch để sharpie lệnh trên máy tính xách tay của tôi. Cảm ơn. – Milktrader

+0

@Milktrader: điều cần thiết là người cố chạy tệp có quyền thực thi trên đó. Đọc trang người dùng cho 'chown' và phần của trang người dùng' ls' trên "Định dạng dài" (tức là 'ls -l'). – dmckee

+0

Mọi thứ đặt bit thực thi cho chủ sở hữu sẽ hoạt động, miễn là bạn là chủ sở hữu của tệp. Tối thiểu, bạn cần '100', nhưng sau đó bạn sẽ không thể đọc hoặc viết nó nữa. Bạn có thể muốn ít nhất là '700', cho phép chủ sở hữu đọc, viết và thực thi các quyền, nhưng từ chối tất cả các quyền cho tất cả mọi người khác (trừ gốc). – Thomas

2

Ngoài câu trả lời của Sjoerd ... Chỉ các thư mục được liệt kê trong biến môi trường PATH mới được kiểm tra cho các lệnh chạy. Bạn cần nhập ./shebang.r (thay vì chỉ shebang.r) nếu thư mục hiện tại, được gọi là ., không nằm trong số PATH của bạn.

Kiểm tra PATH, gõ

echo $PATH 

Để thêm .-PATH, gõ

export PATH="$PATH:." 

Bạn có thể thêm dòng này vào ~/.bashrc của bạn để làm cho nó xảy ra tự động nếu bạn mở một lớp vỏ mới.

+0

có, tôi cần sử dụng ./shebang.r để làm cho nó hoạt động. Tôi đã nói rằng thêm. với biến PATH giới thiệu nguy cơ bảo mật, nhưng tôi có thể làm điều đó anyway vì nó là máy tính cá nhân của tôi và nó không giống như tôi có mã khởi chạy tên lửa trên đó. – Milktrader

+2

Rủi ro bảo mật là bạn có thể nằm trong một thư mục mà người khác nói, một chương trình có tên 'ls' mà bạn có thể vô tình thực thi. Nếu '.' là cuối cùng trong' PATH' của bạn, rủi ro là khá nhỏ, vì thông thường '/ bin/ls' sẽ được ưu tiên, và' .' sẽ chỉ được tìm kiếm trong trường hợp của một lệnh không tồn tại. Tuy nhiên, tôi khuyên bạn không nên thêm '.' vào' PATH' của người dùng root, vì thiệt hại tiềm năng lớn hơn. Xem thêm https://listman.redhat.com/archives/redhat-list/1999-July/msg01969.html – Thomas

Các vấn đề liên quan