2009-08-19 17 views
6

Sapete se c'è qualche strumento per la compilazione script bash?compilatori per gli script di shell

Non importa se quello strumento è solo un traduttore (ad esempio, qualcosa che converte uno script di bash in un programma in C), a condizione che il risultato tradotto possa essere compilato.

Sto cercando qualcosa come shc (è solo un esempio: so che shc non funziona come compilatore). Ci sono altri strumenti simili?

risposta

1

non credo che si sta andando a trovare nulla, perché non si può davvero "compilazione" uno script di shell. Potresti scrivere un semplice script che converte tutte le linee in chiamate a system(3), quindi "compile" come programma in C, ma questo non avrebbe un notevole incremento delle prestazioni rispetto a qualsiasi cosa tu stia attualmente utilizzando, e potrebbe non gestire le variabili correttamente. Non farlo.

Il problema di "compilazione" uno script di shell è che gli script di shell basta chiamare programmi esterni.

+1

Gli script di shell possono fare molto di più che eseguire solo programmi esterni. Puoi fare cicli e assegnare e confrontare variabili e altre cose. Inoltre, molte shell implementano internamente alcuni comandi più comuni in modo che non debbano chiamare programmi esterni per eseguirli. – pib

6

Una ricerca di Google porta in primo piano CCsh, ma vi costerà $ 50 per la macchina per una licenza.

La documentazione dice che CCsh compila Bourne Shell (bash non ...) script per il codice C e che si capisce come replicare la funzionalità di 50 comandi standard dispari evitando la necessità di fork loro.

Ma CCsh non è open source, quindi se non fa quello che vi serve (o aspetti) non sarà in grado di guardare il codice sorgente di capire perché.

+0

+1 Grazie! Non sapevo di CCsh. – mfriedman

+2

Questo programma sembra abbastanza interessante, ma solleva la domanda "Cosa stai cercando di realizzare?", Che avrei dovuto chiedere nella mia risposta. Se questo sembra quello che vuoi, una scommessa migliore potrebbe essere riscrivere lo script bash in un'altra lingua (C se hai assolutamente bisogno di velocità, C++ se hai bisogno di un buon bilanciamento tra velocità e funzionalità built-in, Perl/Python se l'unico aumento delle prestazioni di cui hai veramente bisogno non è forking per ogni comando, ecc.) –

+0

Non hanno un prezzo sul sito web, ma chiedono di essere contattati per richiedere loro di fornire un preventivo. Inoltre, la distribuzione del binario risultante è gratuita. –

0

In teoria si potrebbe effettivamente ottenere un buon incremento delle prestazioni.

pensare a tutte le

if [ x"$MYVAR" == x"TheResult" ]; then echo "TheResult Happened" fi 

(nota invocazione di prova, quindi eco, nonché Interpretazione necessario da fare.)

che potrebbe essere sostituito da

if (!strcmp(myvar, "TheResult")) printf("TheResult Happened"); 

In C: nessun avvio del processo, nessuna operazione di ricerca del percorso. Un sacco di bontà.

+1

In realtà, almeno in bash la riga precedente 'if [x" $ MYVAR "== x" TheResult "]; quindi echo "TheResult Happened" fi' non richiama alcun comando esterno, poiché sia ​​test che echo sono bash builtin. Quindi non avviene la foratura, e di conseguenza, l'aumento delle prestazioni dalla compilazione alla C non sarebbe grande come suggerito sopra. –

Problemi correlati