Linux =是否有类似“ Java Shell”的东西而不是其他Linux Shell?


8

我最了解的编程语言是Java。当前,我必须编写很多“ shell脚本”来使服务器自动化。是否有类似“ Java Shell”的东西,所以我可以用Java编写Shell脚本?


16
如果您只有锤子,那么一切看起来都像钉子。也许是时候该学习一些新的编程语言了,特别是那些更适合您当前工作的语言。

您是否注意到过各种形状和大小的锤子,所以您可以选择一种适合手头的工作?
约翰·加迪尼尔

我认为关键是,有时我们必须安装螺丝。
DutchUncle 2011年

好吧,关于锤子:标准化是/可能是关键的“成功原则”之一。当然,总会有一些更专业,更合适的东西,但这在大多数情况下会增加很多开销……我的问题是,我实际上只需要对某些东西进行原型设计。我不是程序员,我更是一个“商业经济学”的人……所以java外壳(带有松散的输入方式……)本来很棒...感谢您的回答……
jens

2
使用Java作为命令外壳程序与使用Java作为脚本语言之间存在巨大的差异。
tylerl 2011年

Answers:


4

您可以使用groovysh并使用groovysh。我已经做了一些事情,但是我发现perl或bash / sh对于执行管理脚本最有用。当您所需要做的就是执行OS命令和搜索文本时,像Java这样的应用程序语言会增加很多开销。


为Groovy +1。尽管使用了Groovy语法,它仍允许您访问JVM和完整的Java API。但是,如果您是Java开发人员,那么接触它并不难。Groovy的最大推动力之一是能够编写独立于系统的脚本-进行部署,测试或进行任何操作。最好的部分-无需更改源即可在Windows,Linux和OS X上运行。哦,是的,您可以在Windows上使用Cygwin来运行基于nix的脚本,但随后您必须处理Cygwin(不好玩)。
迈克,

实际上,用groovysh替换bash脚本非常困难。但是它朝着正确的方向迈出了一步,并且似乎有一些(尽管是不连续的)使它像真正的外壳一样工作(例如“垃圾”)……最后,我将不得不学习bash。但是我没有听说过groovysh,我认为这是拥有“ java shell”的最佳尝试……
jens

11

没有真正的要求“ shell脚本”必须用shell语言编写,如果愿意,您可以使用C甚至Assembler进行所有操作。

在Shell脚本的上下文中,Shell只不过是一种编程语言的解释器,就像Perl或PHP一样,但是针对您通常使用Shell脚本完成的工作进行了优化。

从长远来看,我建议您学习bash之类的东西,这并不难,因为shell的能力非常有限,因此无需学习太多。


1
用非c或Shell语言编写管理程序的主要问题是确保运行时可用于您的语言。大多数Linux系统在安装时都带有bash,csh,perl,有时还带有python,但是它们没有Java。
Jeff Strunk

3

一些较简单的jvm语言具有外壳程序,但是它们是解释器的前端,而不是用于sysadmining的自定义方言。一个好的系统外壳需要有出色的进程和文件描述符支持,并具有简洁的语法和内建函数,我认为Java中不存在。

您可以将编程与脚本混合使用诸如Chef,Puppet,vlad之类的东西,但这意味着首先要学习bash脚本,因为这些语言非常明智地将命令委托给了shell。诸如Ruby,Perl和Python之类的语言不太冗长,您会发现它们使用了很多。Java的冗长性和一些核心价值(在jvm中做所有事情,不要离开ide)使它非常不适合该任务。


3

就在这里。我一直不时使用BeanShell,即使目前它还没有处于活跃的开发中。它是标准Java语法的解释器,并且如果需要,还带有图形解释器/环境。

您可以按照BeanShell docs中的描述编写Shell脚本,但是为此必须使Beanshell jar文件可用于Java安装(例如,将其放入/ext/libJRE安装的文件夹中),否则Java将找不到bsh.Interpreter该类。 。

但是,我还建议您仔细看一下您的shell加密选项(您没有提到您的环境,但是使用Linux时TiZon对bash的建议很酷)。仅当尝试提高类似于shell的任务(例如,移动文件,调用命令等)的效率时,才使用成熟的通用编程语言(如Java)进行操作。



2

我编写了jpad.io,以允许运行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"));

您也可以从命令行运行以下命令:

 > 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

是的,将beanshell .jar添加到Javahome / jre / lib / ext目录中,然后您可以启动如下脚本:

java bsh.Interpreter myscript.bsh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.