2012-09-26 61 views
5

我需要創建一個Java命令行,以便在服務器上遠程調用該命令行。它將需要:具有自動完成功能的Java命令行「shell」

  • 閱讀用戶文本的「行」。
  • 識別用戶是否按下「tab」鍵以方便自動完成。
  • 識別用戶是否按下歷史記錄的「上/下」鍵。

在我離開並推出自己的產品之前,是否有人知道可能有助於全部或部分此功能的Java庫?

在SSH命令行可能是這樣的:

鮑勃> Java的罐子MyTool.jar

MyTool開始。
請輸入命令:

> server1的啓動
服務器開始...
服務器啓動

>服務器2負荷佔
完成

> server(服務器)關閉
完成

>退出

+0

爲了幫助您的谷歌搜索,您正在尋找的關鍵字是「readline」,這是爲Bash命令行提供動力的C庫,等等。我在下面的答案中找到了幾個類似Java readline的庫。你可能會找到一些更適合你的需求的其他人。 –

回答

5

結賬JReadlinejline2

+0

'Jreadline'非常有希望,'jline2'似乎需要一些JNI附件 – Jacob

+0

似乎Jreadline不再存在,或者託管在其他地方。任何想法 ? – Benoit

0

我假設你的意思是類似於python解釋器。 Java中沒有相同的原因是因爲Java在執行之前需要編譯爲字節碼。

如果您正在尋找具有良好自動完成功能的東西。我會推薦eclipse或netbeans。他們還會自動編譯您的應用程序,讓您在完成編寫代碼後快速運行代碼。

希望有所幫助。

+0

不完全是我問的。編輯的問題清晰。 – Jacob

+0

哦,我明白了。恐怕我沒有聽說過那樣的事,對不起。 –

+0

順便說一句,編譯Java的事實並不能排除有類似python的shell。 Scala被編譯並運行在JVM上,其REPL(read-eval-print-loop)工作得很好。事實上,我有時使用Scala的REPL來交互式訪問Java。 – jbyler

1

看起來好像你想一次詢問3個不同的問題,不知道你真正想要的答案。

  • 接受用戶輸入並提供自動完成是微不足道,我很懷疑你會發現一個通用的庫這樣的任務

  • 解析複雜的bash類似的聲明聽起來象是很酷的和圖書館可能存在這樣做,但我認爲它不會給你很多空間來創建你自己的bash式指令。(尤其是考慮到你說它需要比任何你可以做bash腳本更復雜 - 這是一個很高的訂單)

  • 解析簡單的用戶輸入,就好像它是一個命令行輸入或命令也是顯然的,如果這是你在找什麼,你應該看看這可能重複:How to parse command line arguments in Java?

我建議重組你的問題是你在尋找什麼更具體,避免把重點放在「自動完成」的簡單任務,並簡單地接受用戶在文本框中的輸入。

+0

對不起,有點不清楚。第二點是我的意思。 – Jacob

1

你看過BeanShell嗎?它不像shell本身(比如bash或csh),但它可以讓你像解釋器一樣鍵入java命令,你可以使用tab來自動完成。

我只使用了1.X版本的bean shell,但它們總是爲你打開一個窗口,所以它不是你可以在現有的shell中運行的東西。

+0

聽起來很酷。聽起來比支持讀取用戶輸入文本行的API複雜得多,但仍值得一看! – Jacob

0

這場比賽晚了點,但我會加上CrashCliche混合。

0

Apache Karaf有一個命令外殼,可以用作庫來爲其他應用程序構建命令外殼。您可以創建用於表示命令的類,並使用註釋爲命令指定選項。 Karaf庫提供了製表符完成,歷史和行編輯,以及交互式運行或讀入文件或命令行參數以作爲腳本執行的能力。

我找到了它here並已在我自己的項目中使用它;它工作得很好。我無法將它與其他任何人作比較,因爲我沒有使用它們。

0

picocli Java命令行解析庫最近添加了自動完成功能。它的主要用例是創建命令行工具,但我已經看到它使用嵌入在類似shell的應用程序中。重要的不是如何從System.in中讀取,而是從用戶輸入中解析子命令,選項和參數。

您可能還喜歡它如何使您可以在使用幫助消息中使用ANSI顏色和樣式。您可能能夠在您的shell應用程序中利用它。

enter image description here

免責聲明:我是作者,因此偏頗。