2013-09-10 132 views
24

khi tôi đã làm which groovy, tôi có sản lượng dướichạy kịch bản hấp dẫn từ dòng lệnh

/usr/local/bin/groovy 

Vì vậy, tôi đã đi trước và tạo ra một helloworld.groovy với nội dung dưới đây

#!/usr/local/bin/groovy 
println "hello world" 

Sau đó tôi đã làm chmod +x helloworld.groovy và cố gắng chạy tệp với ./hellworld.groovy và thật đáng buồn, tôi nhận được lỗi này ./helloworld.groovy: line 2: print: command not found

Tôi có thể nhận được loại bỏ lỗi bằng cách thay đổi thành

#!/usr/bin/env groovy 
println "hello world" 

vì vậy câu hỏi tôi có là lý do khiến phương pháp đầu tiên gây ra lỗi?

+0

Có một cuộc thảo luận lớn về chủ đề này trong câu trả lời này http://stackoverflow.com/questions/306139/how-do-i-include-jars-in- a-groovy-script/8945888 # 8945888 – chim

+0

Và cũng trên cùng một câu hỏi ... http://stackoverflow.com/a/9692013/673282 – chim

Trả lời

24

Bạn cần phải chạy kịch bản như thế này:

groovy helloworld.groovy 
+4

hoặc chỉ 'groovy helloworld'. :) – dmahapatro

+6

kể từ groovy cũng là một ngôn ngữ kịch bản, chúng ta sẽ có thể chạy nó như perl hoặc python phải không? do đó, câu hỏi là tại sao './helloworld.groovy' trả về một lỗi về' println'. sự khác nhau giữa '#!/usr/local/bin/groovy' và' #!/usr/bin/env groovy' là gì? – jjennifer

+10

'#!/Usr/local/bin/groovy' là vị trí chính xác nơi cài đặt groovy. Điều đó làm cho tập lệnh không được di chuyển sang một hệ thống khác, nơi groovy được cài đặt ở nơi khác. Tuy nhiên, lệnh # #/usr/bin/env' groovy gọi chương trình "/ usr/bin/env" với đối số "groovy" và/usr/bin/env đang tìm biến PATH của bạn để gọi "groovy".
BTW: shebang tốt hơn là '#!/usr/bin/env'. Lưu ý khoảng cách giữa! và /. Bằng cách đó, 4 byte đầu tiên của mỗi "Kịch bản" giống hệt nhau (đó là trường cũ để làm cho "số ma thuật" này của tệp) –