2011-06-04 73 views
3

我使用cshell/tcshell之前,並轉向python。使用java作爲linux shell腳本語言?

現在我要將所有的shell腳本,gui,數據庫,網頁集成到一起。 Python在大多數作品中都很出色,但在GUI,一般性能和第三方庫方面相對較弱。

所以我打算嘗試java作爲我的主要開發語言。它是否擅長shell交互式編程,過程控制,等等?

非常感謝。

回答

3

由於啓動速度較慢,缺乏與操作系統,命令和文件一起工作的內置庫(我的意思是,甚至沒有辦法複製文件,因此Java本身可能不是最大的shell語言在Java中無需創建兩個輸入和輸出流並管理數據,yack!)。

但是!有很多基於JVM的語言,比如JRuby(ruby),Rhino(javascript),Jython(python),Groovy或者shell,等等,它們像shell語言一樣工作,並且可以運行其他Java編寫的程序。我建議你看看Grash,這可能正是你需要的。

其中一些語言甚至有一種預加載JVM運行時的方法來加速啓動時間(例如,針對JRuby的Nailgun),以便解決啓動時間慢的問題。另請參閱使用Ruby(JRuby)作爲shell語言的this post

+0

*我的意思是,甚至沒有辦法複製文件在Java中,而不訴諸創建兩個輸入和輸出流和管道數據,yack!*這不是事實:**'FileChannel.transferTo **。無論哪種方式,對於shell腳本來說主要問題是w/java,因爲JVM需要花費相當多的時間。不過,主要的罪魁禍首當然是磁盤。 – bestsss 2011-06-04 06:36:08

+0

'FileChannel.transferTo'沒有更好的了。您仍然必須爲源文件和目標文件創建兩個文件句柄,並手動循環它以傳輸數據。對於像複製這樣簡單的東西,這是很多代碼。使用apache的commons.io庫將它比作一行:'FileUtils.copyFile(file1,file2)'。啓動時間很慢,但正如我所提到的那樣,您可以用Nailgun打敗它,它可以預先加載JVM一次,並允許您在每次啓動程序時重新使用它。 Nailgun應該適用於任何基於JVM的語言。 – rodion 2011-06-04 06:47:45

+0

我沒有看到問題,你可以使用apache庫或有自己的類/方法。至於Nailgun(剛剛檢查了源代碼):它是一個軟件(專用服務器),可以在多次發票的情況下加快一些命令的速度。如果不保護靜態數據,也不保留長時間休眠的線程,那麼它將需要一個運行良好的「插件」來清理所有內容,包括文件句柄。運行一個單獨的進程可以節省所有可能的錯誤,未閉合的句柄,內存泄漏等問題。 – bestsss 2011-06-04 07:10:30

1

引導JVM通常速度較慢,並且消耗了相當可觀的內存(與原生應用程序相比) 因此,運行許多經常啓動和死亡的(並行)小應用程序(進程)並不好。 ...如果這是你的意圖

+0

至於啓動有Nailgun:http://www.martiansoftware.com/nailgun/ – Rekin 2011-06-04 05:34:55

0

我寫了jpad,允許運行java「shell腳本」和交互式片段,同時還提供了很好的結果可視化。這說明我的意思:

JPad Java REPL

要使用此作爲腳本語言複製一個文件,你可以使用: 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")); 

,您也可以通過命令行運行爲:

> more fileio.jpad 
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")); 
> 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