2011-01-23 29 views
19

Tôi muốn chạy các chương trình Java mà tôi đang tạo trên dòng lệnh (linux và mac). Tôi không muốn gõ "java" và đối số tất cả các thời gian, vì vậy tôi đang suy nghĩ về việc tạo các kịch bản wrapper. Cách tốt nhất để làm điều này để họ làm việc ở mọi nơi là gì? Tôi cũng muốn có khả năng vượt qua các đối số. Tôi đã nghĩ đến việc sử dụng "shift" để làm điều này (loại bỏ đối số đầu tiên).Làm cách nào để chuyển đối số từ trình bao bọc shell vào ứng dụng Java?

Có cách nào tốt hơn để làm điều này mà không sử dụng tập lệnh nào cả? Có lẽ làm cho một tập tin thực thi mà không yêu cầu gọi thông qua lệnh "java"?

Trả lời

42

Giả sử rằng bạn đang sử dụng một lớp vỏ đó là tương thích với vỏ Bourne; ví dụ. sh, bash, ksh, vv, các wrapper sau sẽ vượt qua tất cả các đối số dòng lệnh để lệnh java:

#!/bin/sh 
OPTS=... 
java $OPTS com.example.YourApp "[email protected]" 

Các [email protected] mở rộng tới các đối số còn lại cho shell script, và đặt dấu ngoặc kép quanh nó gây ra những lập luận để được trích dẫn riêng lẻ, sao cho các thông tin sau sẽ hoạt động:

$ wrapper "/home/person/Stupid Directory/foo.txt" 
+1

Ai đó có thể giải thích tại sao '" $ @ "' tốt hơn '" $ * "'? – Segfault

+3

@Segfault - vì * "[t] he $ @ mở rộng đến các đối số còn lại cho tập lệnh shell và đặt dấu ngoặc kép xung quanh nó khiến các đối số được trích dẫn riêng lẻ", * –

4

Bạn có thể create a shell script rằng accepts arguments. Trong tập lệnh shell của bạn, nó sẽ trông giống như sau: -

java YourApp $1 $2 

Trong trường hợp này, YourApp chấp nhận hai đối số. Nếu kịch bản shell của bạn được gọi là app.sh, bạn có thể thực hiện nó như thế này: -

./app.sh FirstArgument SecondArgument 
+2

Thật không may, điều này sẽ phá vỡ nếu tập lệnh bao bọc được gọi với đối số được trích dẫn; ví dụ. tên đường dẫn chứa dấu cách. Nó cần dấu ngoặc kép xung quanh '$ 1',' $ 2' etcetera –

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