2009-03-14 115 views
32

Los scripts Bash son muy útiles y pueden ahorrar mucho tiempo de programación. Entonces, ¿cómo se inicia un script bash en un programa C++? Además, si sabes cómo hacer que el usuario se convierta en el súper-usuario también sería agradable. ¡Gracias!Cómo ejecutar un script bash desde el programa C++

Respuesta

46

Utilice la función system.

system("myfile.sh"); // myfile.sh should be chmod +x 
+3

Gracias pero olvidó incluir esto: system ("./ myfile.sh"); – Kredns

+0

Funcionará sin. si la carpeta está en su ruta :) –

+2

El directorio actual '.' * no debe * estar en su' $ PATH'. –

13
#include <stdio.h> 
#include <stdlib.h> 

// .... 


system("my_bash_script.sh"); 
+3

¿Qué pasaría si el script bash hiciera eco de texto a tty? P.ej. ¿y si fuera un "gato"? ¿Podría el programa c tener esa salida? –

9

La única manera estándar depende de la implementación mandato es utilizar la función de system()stdlib.h.

Además, si usted sabe cómo hacer que el usuario se convierta en el súper usuario que también sería bueno.

¿Desea que la secuencia de comandos se ejecute como superusuario o desea elevar los privilegios del ejecutable C? El primero se puede hacer con sudo, pero hay algunas cosas que debe saber antes de poder usar sudo.

4

StackOverflow: How to execute a command and get output of command within C++?

StackOverflow: (Using fork,pipe,select): ...nobody does things the hard way any more...

Además, si usted sabe cómo hacer que el usuario se convierta en el super-usuario que estaría bien también. ¡Gracias!

sudo. su chmod 04500. (setuid() & seteuid(), pero requieren que ya sea root. E..g. chmod'ed 04 ***.)

Tenga cuidado. Estos pueden abrir "interesting" agujeros de seguridad ...

Dependiendo de lo que esté haciendo, es posible que no necesite root. (Por ejemplo: a menudo voy a dispositivos chmod/chown/dev (puertos serie, etc.) (bajo sudo root) para que pueda usarlos desde mi software sin ser root. Por otro lado, eso no funcionan tan bien al cargar/descargar módulos kernel ...)

0

Dado que esta es una pregunta muy antigua, y este método no se ha agregado (aparte de la función de llamada system()), creo que sería útil incluir la creación el script de shell con el binario C mismo. El código del shell se alojará dentro del archivo fuente file.c. Aquí está un ejemplo de código:

#include <stdio.h> 
#include <stdlib.h> 

#define SHELLSCRIPT "\ 
#/bin/bash \n\ 
echo -e \"\" \n\ 
echo -e \"This is a test shell script inside C code!!\" \n\ 
read -p \"press <enter> to continue\" \n\ 
clear\ 
" 

int main() { 

system(SHELLSCRIPT); 
return 0; 
} 

Básicamente, en pocas palabras (juego de palabras), estamos definiendo el nombre del script, dar contenido a la secuencia de comandos, encerrándolas entre comillas dobles (mientras que la inserción se escapa adecuados para ignorar comillas dobles en el código del shell), y luego llamar al nombre de ese script, que en este ejemplo es SHELLSCRIPT usando la función system() en main().

Cuestiones relacionadas