Linux = Esiste qualcosa come una "Shell Java" invece di altre shell Linux?


8

Il linguaggio di programmazione che conosco di più è Java. Attualmente devo scrivere molti "script di shell" per automatizzare i miei server. Esiste qualcosa di simile a una "shell Java" in modo da poter scrivere gli script della shell in Java?


16
Se tutto ciò che hai è un martello, tutto sembra un chiodo . Forse è tempo che tu apprenda alcuni nuovi linguaggi di programmazione, specialmente quelli più adatti al tuo attuale lavoro.
Juliano,

Hai mai notato che i martelli sono disponibili in tutte le forme e dimensioni, in modo da poter scegliere quello adatto per il lavoro da svolgere?
John Gardeniers,

Penso che il punto sia che, a volte, dobbiamo montare le viti.
Zio olandese,

Bene, per quanto riguarda il martello: la standardizzazione è / può essere uno dei "principi di successo" chiave. Ovviamente c'è sempre qualcosa di più specializzato e più appropriato, ma questo aggiunge un sacco di costi generali nella maggior parte dei casi ... Il mio problema è che in realtà ho solo bisogno di prototipare qualcosa. Non sono un programmatore, sono più un "economia aziendale" ragazzi ... Quindi un java shell (con digitazione libera ...) sarebbe stato grandioso ... Grazie per tutte le vostre risposte ...
jens

2
C'è una grande differenza tra l'uso di java come shell dei comandi e l'uso di java come linguaggio di scripting.
Tylerl,

Risposte:


4

Puoi diventare groovy e usare groovysh. Ho fatto alcune cose con quello, ma trovo perl o bash / sh il più utile per fare script di amministrazione. Un linguaggio applicativo come Java aggiunge un sacco di sovraccarico quando tutto ciò che devi fare è eseguire i comandi del sistema operativo e cercare il testo.


+1 per Groovy. Ti consente di accedere a JVM e all'API Java completa, sebbene con sintassi Groovy. Ma se sei uno sviluppatore Java, non è così difficile entrare. Una delle grandi spinte per Groovy è la capacità di scrivere script indipendenti dal sistema - per la distribuzione, per i test, per qualsiasi cosa. La parte migliore: funziona su Windows, Linux e OS X senza cambiare sorgente. Oh, e sì, potresti usare Cygwin su Windows per eseguire script basati su nix, ma poi dovresti avere a che fare con Cygwin (non è divertente).
Mike,

In realtà è vero che è molto difficile sostituire lo script bash con groovysh. Ma è il passo nella giusta direzione e sembra che ci siano alcuni (anche se tentativi sospesi) per farlo funzionare più come un vero guscio (ad esempio "grash") ... Alla fine dovrò imparare bash. Ma non avevo mai sentito parlare di groovysh e penso che sia il miglior tentativo di avere un "java shell" ...
jens

11

Non vi è alcun reale requisito che gli "script di shell" debbano essere scritti in un linguaggio di shell, si potrebbe fare tutto con C o persino Assembler, se lo si desidera.

Nel contesto degli script di shell, la shell non è altro che un interprete per un linguaggio di programmazione, proprio come Perl o PHP, ma fortemente ottimizzata per il tipo di lavoro che svolgi principalmente con uno script di shell.

A lungo termine, suggerirei di imparare bash o qualcosa del genere, il che non è molto difficile perché le conchiglie sono molto limitate nelle loro capacità in modo che non ci sia troppo da imparare.


1
Il problema principale con la scrittura di programmi amministrativi in ​​una lingua diversa da c o da una shell è assicurarsi che il runtime sia disponibile per la tua lingua. La maggior parte dei sistemi Linux viene fornita con bash, csh, perl e talvolta python al momento dell'installazione, ma non avranno java.
Jeff Strunk,

3

Alcune delle lingue jvm più leggere hanno shell, ma quelle sono front-end per l'interprete, non dialetti personalizzati per l'amministrazione del sistema. Una buona shell di sistema deve avere un eccellente supporto per processi e descrittori di file e sintassi e builtin concisi, e non credo che esista in Java.

Puoi combinare la programmazione con lo scripting con cose come chef, burattino, vlad e simili, ma ciò significa prima imparare lo script bash, perché quei linguaggi, abbastanza sensatamente, delegano comandi alla shell. Lingue come Ruby, Perl e Python sono meno dettagliate e le vedrai usate molto. La verbosità di Java e alcuni dei suoi valori fondamentali (fare tutto nel jvm, non lasciare l'ide) lo rendono molto inadatto al compito.


3

Si C'è. Di tanto in tanto ho usato BeanShell , anche se al momento non è in fase di sviluppo attivo. È un interprete per la sintassi Java standard e viene fornito anche con un interprete / ambiente grafico, se necessario.

Potresti scrivere i tuoi script di shell come descritto nei documenti di BeanShell , ma per questo dovresti rendere disponibile il file jar Beanshell per la tua installazione Java (es. Metterlo nella /ext/libcartella della tua installazione JRE), altrimenti java non troverà la bsh.Interpreterclasse .

Tuttavia, consiglierei anche di dare un'occhiata più da vicino alle opzioni di scripting della shell (non hai menzionato il tuo ambiente, ma la raccomandazione di TiZon con bash è interessante quando usi Linux). L'uso di un linguaggio di programmazione generico come Java si intromette solo quando si cerca di essere produttivi con attività simili alla shell, ad esempio spostare file, invocare comandi e simili.



2

Ho scritto jpad.io per consentire l'esecuzione di "script di shell" java e frammenti interattivi fornendo anche una buona visualizzazione dei risultati. Questo mostra cosa intendo:

JPad ​​Java REPL

Per copiare un file usando questo come linguaggio di scripting dovresti usare: 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"));

Che puoi anche eseguire dalla riga di comando come:

 > 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

Sì, aggiungi il beanshell .jar nella directory Javahome / jre / lib / ext e quindi puoi avviare gli script in questo modo:

java bsh.Interpreter myscript.bsh

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.