2009-03-14 6 views
32

Les scripts Bash sont très utiles et permettent d'économiser beaucoup de temps de programmation. Alors, comment lancez-vous un script bash dans un programme C++? Aussi, si vous savez comment faire de l'utilisateur le super-utilisateur, ce serait bien aussi. Merci!Comment exécuter un script bash à partir du programme C++

Répondre

46

Utilisez la fonction system.

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

Merci, mais vous avez oublié d'inclure ceci: system ("./ myfile.sh"); – Kredns

+0

Ça va marcher sans. si le dossier est dans votre chemin :) –

+2

Le répertoire courant '.' * ne devrait pas * être dans votre' $ PATH'. –

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

// .... 


system("my_bash_script.sh"); 
+3

Que faire si le script bash devait renvoyer du texte à tty? Par exemple. Et si c'était un "chat"? Est-ce que le programme c pourrait avoir cette sortie? –

9

La seule norme façon dépendante de la mise en œuvre obligatoire est d'utiliser la fonction de system()stdlib.h.

Aussi si vous savez comment faire de l'utilisateur devenir le super-utilisateur ce serait bien aussi.

Voulez-vous que le script s'exécute en tant que super-utilisateur ou que vous souhaitiez élever les privilèges de l'exécutable C? Le premier peut être fait avec sudo mais il y a quelques choses que vous devez savoir avant de pouvoir utiliser 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...

Aussi, si vous savez comment faire l'utilisateur de devenir le super-utilisateur qui serait bien aussi. Merci!

sudo. su. chmod 04500. (setuid() & seteuid(), mais ils requièrent que vous soyez déjà root (E..g. chmod'ed 04 ***.)

Faites attention. Ceux-ci peuvent ouvrir "intéressant" trous de sécurité ...

Selon ce que vous faites, vous ne pouvez pas avoir besoin de root. (Par exemple: Je vais souvent chmod/chown/dev périphériques (ports série, etc) (sous sudo root) afin que je puisse les utiliser depuis mon logiciel sans être root, d'autre part, cela ne fonctionne si bien lors du chargement/déchargement des modules du noyau ...)

0

Comme il s'agit d'une question plutôt ancienne, et que cette méthode n'a pas été ajoutée (mis à part la fonction d'appel system()), j'imagine qu'il serait utile d'inclure la création le script shell avec le binaire C lui-même. Le code shell sera hébergé dans le fichier source file.c. Voici un exemple de code:

#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; 
} 

En fait, en un mot (jeu de mots), nous définissons le nom du script, étoffant le script, les enfermant dans des guillemets doubles (tout en insérant les évasions propres à ignorer les guillemets doubles dans le code shell), puis en appelant le nom de ce script, qui dans cet exemple est SHELLSCRIPT en utilisant la fonction system() dans main().

Questions connexes