Linux = Existe algo como um “Java Shell” em vez de outros shell do Linux?

8

A linguagem de programação que mais conheço é o Java. Atualmente, tenho que escrever vários "scripts de shell" para automatizar meus servidores. Existe algo como um "Java Shell" para que eu possa escrever os scripts de shell em Java?

jens
fonte
16
Se tudo o que você tem é um martelo, tudo parece um prego . Talvez esteja na hora de você aprender algumas novas linguagens de programação, especialmente as mais adequadas para o seu trabalho atual.
Juliano
Você já notou que os martelos são de todas as formas e tamanhos, para que você possa escolher um adequado para o trabalho em questão?
John Gardeniers
Eu acho que o ponto é que, às vezes, temos que encaixar parafusos.
DutchUncle
Bem, em relação ao martelo: a padronização é / pode ser um dos principais "princípios de sucesso". É claro que sempre há algo mais especializado e apropriado, mas isso acrescenta muita sobrecarga na maioria dos casos ... Meu problema é que, na verdade, eu só preciso prototipar algo. Estou nenhum programador eu sou mais uma "economia empresarial" caras ... Então uma concha java (com tipificação fraca ...) teria sido ótimo ... Obrigado por todas as suas respostas ...
Jens
2
Há uma grande diferença entre usar o java como seu shell de comando e usar o java como uma linguagem de script.
tylerl

Respostas:

4

Você pode obter groovy e usar groovysh. Eu fiz algumas coisas com isso, mas acho o perl ou o bash / sh os mais úteis para a execução de scripts de administração. Uma linguagem de aplicativo como Java adiciona muita sobrecarga quando tudo o que você precisa fazer é executar comandos do SO e pesquisar texto.

JOTN
fonte
+1 para Groovy. Ele permite que você acesse a JVM e a API Java completa, embora com sintaxe Groovy. Mas se você é um desenvolvedor Java, não é tão difícil entrar. Um dos grandes incentivos para o Groovy é a capacidade de escrever scripts independentes do sistema - para implantação, teste e qualquer coisa. Melhor parte - funciona no Windows, Linux e OS X sem alterar a fonte. Ah, e sim, você pode usar o Cygwin no Windows para executar scripts baseados em nix, mas precisará lidar com o Cygwin (não é divertido).
28511 Mike
Na verdade, é verdade que é muito difícil substituir o script bash pelo groovysh. Mas é o passo na direção certa e parece que existem algumas (embora tentativas descontinuadas) para fazê-la funcionar mais como uma concha real (por exemplo, "grash") ... No final, terei que aprender o bash. Mas eu não tinha ouvido falar de groovysh e eu acho que é a melhor tentativa de ter um "shell java" ...
Jens
11

Não existe um requisito real de que os "scripts de shell" tenham que ser escritos em uma linguagem de shell; você pode fazer tudo com C ou mesmo Assembler, se quiser.

No contexto de scripts de shell, o shell nada mais é do que um intérprete para uma linguagem de programação, como Perl ou PHP, mas altamente otimizado para o tipo de trabalho que você faz principalmente com um script de shell.

A longo prazo, sugiro que você aprenda bash ou algo assim, o que não é realmente difícil, porque as conchas são muito limitadas em suas habilidades, de modo que não há muito o que aprender.

Sven
fonte
1
O principal problema com a gravação de programas administrativos em um idioma diferente de c ou shell é garantir que o tempo de execução esteja disponível para o seu idioma. A maioria dos sistemas Linux vem com bash, csh, perl e às vezes python no momento da instalação, mas eles não têm java.
Jeff Strunk
3

Algumas das linguagens jvm mais leves possuem shells, mas essas são front-ends para o intérprete, não dialetos personalizados para administração de sistemas. Um bom shell do sistema precisa ter excelente suporte a descritores de processos e arquivos, além de sintaxe e componentes concisos, e não acho que exista em Java.

Você pode misturar programação com script com coisas como chef, fantoche, vlad e similares, mas isso significa aprender primeiro o script bash, porque essas linguagens, sensatamente, delegam comandos ao shell. Idiomas como Ruby, Perl e Python são menos detalhados e você os verá muito usados. A verbosidade do Java e alguns de seus principais valores (faça tudo na jvm, não deixe o ide) o tornam muito inadequado para a tarefa.

Tobu
fonte
3

Sim existe. Eu uso o BeanShell de tempos em tempos, mesmo que não esteja em desenvolvimento ativo no momento. É um intérprete para a sintaxe Java padrão e também vem com um interpretador / ambiente gráfico, se necessário.

Você poderia escrever seus scripts de shell, conforme descrito nos documentos do BeanShell , mas teria que disponibilizar o arquivo jar do Beanshell para sua instalação Java (por exemplo, colocá-lo na /ext/libpasta da instalação do JRE), caso contrário, o java não encontrará a bsh.Interpreterclasse .

No entanto, eu também recomendaria que você analisasse com mais atenção as opções de extração de shell (você não mencionou seu ambiente, mas a recomendação do TiZon com o bash é legal ao usar o Linux). O uso de uma linguagem de programação de uso geral como Java só atrapalha ao tentar ser produtivo com tarefas semelhantes a shell, por exemplo, mover arquivos, chamar comandos e coisas do tipo.

Axel Knauf
fonte
2

Eu escrevi o jpad.io para permitir a execução de "shell scripts" e trechos interativos em java, além de fornecer uma boa visualização dos resultados. Isso mostra o que eu quero dizer:

JPad ​​Java REPL

Para copiar um arquivo usando isso como uma linguagem de script, você usaria: 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"));

Que você também pode executar na linha de comando como:

 > 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
Ryan Hamilton
fonte
0

Sim, inclua o beanshell .jar no diretório Javahome / jre / lib / ext e, em seguida, você pode ativar scripts da seguinte forma:

java bsh.Interpreter myscript.bsh
djangofan
fonte