我之前使用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脚本"和交互式代码片段,同时还提供了很好的可视化结果。这说明了我的意思:
要将文件复制为脚本语言,可以使用:
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