2009-08-19 22 views
6

¿Sabes si hay alguna herramienta para compilar scripts bash?Compiladores para scripts de shell

No importa si esa herramienta es solo un traductor (por ejemplo, algo que convierta un script bash en un programa C), siempre que se pueda compilar el resultado traducido.

Estoy buscando algo como shc (es solo un ejemplo, sé que shc no funciona como un compilador). ¿Hay alguna otra herramienta similar?

Respuesta

1

No creo que encuentres nada, porque realmente no puedes "compilar" un script de shell. Podría escribir una secuencia de comandos simple que convierta todas las líneas a llamadas al system(3), luego "compilar" eso como un programa en C, pero esto no tendría un mayor impulso en el rendimiento sobre cualquier cosa que esté utilizando actualmente, y podría no manejar las variables correctamente. No hagas esto

El problema con la "compilación" de un script de shell es que los scripts de shell solo llaman a programas externos.

+1

Los scripts de shell pueden hacer mucho más que simplemente ejecutar programas externos. Puede hacer bucles y asignar y comparar variables, así como otras cosas. Además, muchas shells implementan comandos más comunes internamente para que no tengan que llamar a programas externos para ejecutarlos. – pib

6

Una búsqueda en Google muestra CCsh, pero le costará $ 50 por máquina por una licencia.

La documentación dice que CCsh compila los scripts de Bourne Shell (no bash ...) al código C y que comprende cómo replicar la funcionalidad de 50 comandos estándar impares evitando la necesidad de fork ellos.

Pero CCsh no es de código abierto, por lo que si no hace lo que necesita (o espera) no podrá ver el código fuente para averiguar por qué.

+0

+1 ¡Gracias! No sabía sobre CCsh. – mfriedman

+2

Este programa parece bastante interesante, pero plantea la pregunta de "¿Qué estás tratando de lograr?", Que debería haber preguntado en mi respuesta. Si esto se parece a lo que quieres, una mejor opción puede ser reescribir el script bash en otro idioma (C si necesitas absolutamente velocidad, C++ si necesitas un buen equilibrio entre velocidad y funcionalidad incorporada, Perl/Python si es el único el aumento del rendimiento que realmente necesita no se bifurca para cada comando, etc.) –

+0

No tienen un precio en el sitio web, pero solicite que se comuniquen con ellos para solicitarles que proporcionen un presupuesto. Además, distribuir el binario resultante es gratuito. –

0

En teoría, podría obtener un buen impulso en el rendimiento.

pienso en todos los

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

(nota invocación de prueba, luego de eco, así como la interpretación de que había que hacer.)

que podría ser reemplazado por

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

En C: sin inicio de proceso, sin tener que hacer una búsqueda de ruta. Mucha bondad

+1

En realidad, al menos en bash la línea anterior 'if [x" $ MYVAR "== x" TheResult "]; entonces echo "TheResult Happened" fi' no invoca ningún comando externo, ya que tanto test como echo son bash builtins. Por lo tanto, no se produce bifurcación y, en consecuencia, el aumento de rendimiento desde la compilación hasta C no sería tan grande como se sugirió anteriormente. –

Cuestiones relacionadas