java编译shell脚本语言_使用Java作为Linux Shell脚本语言?

文章探讨了将Java作为shell脚本语言的可能性,指出Java在启动时间和操作系统集成上的不足,但推荐了JRuby、Rhino、Jython、Groovy等JVM语言作为替代方案。Grash被提出作为一种可能符合需求的解决方案,而Nailgun可以用于减少JVM的启动时间。此外,文章还提到了Apache Commons IO库和JDK7的文件操作API作为简化Java文件操作的方法。
摘要由CSDN通过智能技术生成

我之前使用cshell / tcshell,然后转向python。

现在,我将把所有的shell脚本,gui,数据库和网页集成在一起。 Python在大多数工作上都很擅长,但是在GUI,总体性能和第三部分库方面却相对较弱。

因此,我将尝试将Java作为主要开发语言。 它擅长于shell交互式编程,过程控制等。

非常感谢。

Java本身可能不是最强大的外壳语言,因为启动时间慢,缺少与操作系统,命令和文件一起使用的内置库(我的意思是,甚至没有办法,如果不使用Java,就无法复制文件)创建两个输入和输出流并传输数据,yack!)。

然而!有很多基于JVM的语言,例如JRuby(ruby),Rhino(javascript),Jython(python),Groovy或Grash,Bean-shell等,它们可以像Shell语言一样工作,并且可以运行其他Java编写的程序。我建议您看看Grash,它可能正是您所需要的。

其中一些语言甚至可以预加载JVM运行时以加快启动时间(例如,针对JRuby的Nailgun),从而可以解决启动时间慢的问题。另请参阅这篇文章,以使用Ruby(JRuby)作为外壳语言。

我的意思是,如果不诉诸于创建两个输入和输出流以及对数据进行管道传输,甚至没有办法用Java复制文件,是的!这是不正确的:FileChannel.transferTo。无论哪种方式,shell脚本的主要问题是带有Java的主要问题是JVM的启动花费了很多时间。但是,罪魁祸首当然是磁盘。

FileChannel.transferTo并没有任何改善。您仍然必须为源文件和目标文件创建两个文件句柄,并手动对其进行循环以传输数据。对于像复制这样简单的事情,这是很多代码。对比一下一行:FileUtils.copyFile(file1, file2)使用apaches commons.io库。引导时间很慢,但是,正如我已经提到的,您可以使用Nailgun击败它,它可以预加载JVM一次,并允许您在每次启动程序时重新使用它。 Nailgun应该适用于任何基于JVM的语言。

我看不到问题,您可以使用apache库或拥有自己的类/方法。至于Nailgun(只需检查源代码):它是一些软件(专用服务器),可以在多次卷入时加快某些命令的速度。如果没有保护静态数据,也没有长时间休眠的线程,那么它将需要一个性能良好的插件来清理所有内容,包括文件句柄。运行单独的进程可以避免所有可能的错误,未关闭的句柄,内存泄漏等问题。

旁注,jdk7具有单行复制(和移动)实用程序。 download.java.net/jdk7/docs/api/java/nio/file/

@bestsss我的意思是说Java没有现成的日常shell脚本任务内置函数。好吧,您只需要使用commons.io之类的库,就可以解决这个问题,我同意。至于Nailgun,出于您所描述的原因,我不会在生产中使用它,但是它对于开发和测试脚本很有用。引导时间还取决于您的计算机。在我的台式机上,JVM在客户端模式下的启动时间不到十分之一秒。 Groovy,JRuby等花费的时间明显更长,但是这是否真的对您构成障碍将取决于您的需求。

只需从Java执行cp。毕竟,那就是bash所做的。

如果您想将Java平台用作脚本语言,请看一下Groovy。

引导JVM通常很慢,并且会占用大量内存(与本机应用程序相比)

因此,这对于运行经常启动和死亡的许多(并行)小型应用程序(进程)不利。 ...如果那是你的意图

至于启动,有Nailgun:martiansoftware.com/nailgun

我写了jpad来允许运行Java" shell脚本"和交互式代码片段,同时还提供了很好的可视化结果。这说明了我的意思:

646400c65de8e99fa335ee4692ab01c8.png

要将文件复制为脚本语言,可以使用:

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    

29/04/2017  13:30    

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值