Linux = Có thứ gì đó giống như Java Java Shell Thay vì các shell linux khác không?


8

Ngôn ngữ lập trình mà tôi biết nhiều nhất là Java. Hiện tại tôi phải viết khá nhiều "shell script" để tự động hóa máy chủ của mình. Có cái gì đó giống như "Java Shell" để tôi có thể viết các tập lệnh shell trong Java không?


16
Nếu tất cả những gì bạn có là một cái búa, mọi thứ trông giống như một cái đinh . Có lẽ đã đến lúc bạn học một số ngôn ngữ lập trình mới, đặc biệt là những ngôn ngữ phù hợp hơn với công việc hiện tại của bạn.
Juliano

Bạn có bao giờ nhận thấy rằng búa có đủ hình dạng và kích cỡ, để bạn có thể chọn một cái phù hợp với công việc trong tay không?
John Gardeniers

Tôi nghĩ vấn đề là, đôi khi, chúng ta phải lắp ốc vít.
DutchUncle

Vâng, liên quan đến búa: Tiêu chuẩn hóa là / có thể là một trong những "nguyên tắc thành công" quan trọng. Tất nhiên luôn luôn có một cái gì đó chuyên biệt hơn và phù hợp hơn, nhưng điều này thêm rất nhiều chi phí trong hầu hết các trường hợp ... Vấn đề của tôi là, tôi thực sự chỉ cần tạo ra một cái gì đó. Tôi KHÔNG phải là lập trình viên Tôi là một người "kinh tế kinh doanh" hơn ... Vì vậy, một trình bao java (với cách gõ lỏng lẻo ...) sẽ rất tuyệt ... Cảm ơn tất cả các câu trả lời của bạn ...
jens

2
Có một sự khác biệt lớn giữa việc sử dụng java làm vỏ lệnh của bạn và sử dụng java làm ngôn ngữ kịch bản.
tylerl

Câu trả lời:


4

Bạn có thể nhận được Groovy và sử dụng Groovysh. Tôi đã làm một số điều với điều đó, nhưng tôi thấy perl hoặc bash / sh là hữu ích nhất để thực hiện các tập lệnh quản trị. Một ngôn ngữ ứng dụng như Java thêm rất nhiều chi phí khi tất cả những gì bạn cần làm là thực thi các lệnh OS và tìm kiếm văn bản.


+1 cho Groovy. Nó cho phép bạn truy cập JVM và API Java đầy đủ, mặc dù với cú pháp Groovy. Nhưng nếu bạn là một nhà phát triển Java thì không khó để vào đó. Một trong những cú hích lớn đối với Groovy là khả năng viết các tập lệnh độc lập hệ thống - để triển khai, để thử nghiệm, cho bất cứ điều gì. Phần tốt nhất - hoạt động trên Windows, Linux và OS X mà không thay đổi nguồn. Ồ, và vâng, bạn có thể sử dụng Cygwin trên Windows để chạy các tập lệnh dựa trên nix nhưng sau đó bạn phải đối phó với Cygwin (không vui chút nào).
Mike

Trên thực tế, rất khó để thay thế kịch bản bash bằng Groovysh. Nhưng đó là bước đi đúng hướng và dường như có một số (mặc dù đã ngừng sử dụng) để làm cho nó hoạt động giống như một cái vỏ thực sự (ví dụ "grash") ... Cuối cùng, tôi sẽ phải học bash. Nhưng tôi đã không nghe nói về Groovysh và tôi nghĩ rằng đó là nỗ lực tốt nhất để có "java shell" ...
jens

11

Không có yêu cầu thực sự rằng "shell script" phải được viết bằng ngôn ngữ shell, bạn có thể làm mọi thứ với C hoặc thậm chí là Trình biên dịch, nếu bạn thích điều đó.

Trong ngữ cảnh của các kịch bản shell, shell không có gì khác hơn là một trình thông dịch cho ngôn ngữ lập trình, giống như Perl hoặc PHP, nhưng được tối ưu hóa rất nhiều cho loại công việc bạn chủ yếu làm với kịch bản shell.

Về lâu dài, tôi sẽ đề nghị bạn học bash hoặc một cái gì đó, điều này thực sự không khó vì đạn rất hạn chế trong khả năng của chúng để không có quá nhiều thứ để học.


1
Vấn đề chính với việc viết chương trình quản trị bằng ngôn ngữ khác c hoặc shell là đảm bảo thời gian chạy có sẵn cho ngôn ngữ của bạn. Hầu hết các hệ thống Linux đều có bash, csh, perl và đôi khi là python khi cài đặt, nhưng chúng sẽ không có java.
Jeff Strunk

3

Một số ngôn ngữ jvm nhẹ hơn có vỏ, nhưng những ngôn ngữ này là giao diện người phiên dịch, không phải là phương ngữ tùy chỉnh cho sysadmining. Một hệ thống vỏ tốt cần phải có hỗ trợ mô tả tệp và quy trình tuyệt vời và có cú pháp và nội dung ngắn gọn và tôi không nghĩ rằng nó tồn tại trong Java.

Bạn có thể kết hợp lập trình với kịch bản với những thứ như đầu bếp, bù nhìn, vlad và những thứ tương tự, nhưng điều đó có nghĩa là học bash script trước, bởi vì những ngôn ngữ đó, khá hợp lý, ủy thác các lệnh cho trình bao. Các ngôn ngữ như Ruby, Perl và Python ít dài dòng hơn và bạn sẽ thấy chúng được sử dụng rất nhiều. Độ dài của Java và một số giá trị cốt lõi của nó (làm mọi thứ trong jvm, không rời khỏi ide) làm cho nó rất không phù hợp với nhiệm vụ.


3

Có, có. Thỉnh thoảng tôi vẫn sử dụng BeanShell , mặc dù hiện tại nó không được phát triển tích cực. Nó là một trình thông dịch cho cú pháp Java tiêu chuẩn và cũng đi kèm với một trình thông dịch / môi trường đồ họa, nếu được yêu cầu.

Bạn có thể viết các tập lệnh shell của mình như được mô tả trong các tài liệu BeanShell , nhưng bạn sẽ phải làm cho tệp jar Beanshell có sẵn cho bản cài đặt Java của bạn cho việc này (ví dụ: đặt nó vào /ext/libthư mục cài đặt JRE của bạn), nếu không java sẽ không tìm thấy bsh.Interpreterlớp .

Tuy nhiên, tôi cũng khuyên bạn nên xem xét kỹ hơn các tùy chọn quét vỏ của bạn (bạn không đề cập đến môi trường của mình, nhưng khuyến nghị của TiZon với bash rất tuyệt khi sử dụng Linux). Sử dụng ngôn ngữ lập trình đa mục đích toàn diện như Java sẽ chỉ cản trở bạn khi cố gắng làm việc hiệu quả với các tác vụ giống như vỏ, ví dụ như di chuyển các tệp xung quanh, gọi lệnh và thích.



2

Tôi đã viết jpad.io để cho phép chạy java "shell script" và các đoạn tương tác trong khi cũng cung cấp trực quan hóa tốt các kết quả. Điều này cho thấy những gì tôi có nghĩa là:

REPL Java

Để sao chép tệp bằng ngôn ngữ này, bạn sẽ sử dụng: http://jpad.io/example/1I/fileio

final File file = new File("outt.csv");
Object o = new int[] {1,2,3};
JPad.writeCsv(o, file);
java.nio.file.Files.copy(file.toPath(), Paths.get("copy.csv"));

Mà bạn cũng có thể chạy từ dòng lệnh như:

 > jpad fileio.jpad
 > dir
 29/04/2017  13:30    <DIR>          .
 29/04/2017  13:30    <DIR>          ..
 29/04/2017  13:30                16 copy.csv
 29/04/2017  13:30               160 fileio.jpad
 29/04/2017  13:30                16 outt.csv

0

Có, thêm beanshell .jar vào thư mục Javahome / jre / lib / ext của bạn và sau đó bạn có thể khởi chạy các tập lệnh như vậy:

java bsh.Interpreter myscript.bsh

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.