web-dev-qa-db-fra.com

Comment exécuter un script bash à partir d'un programme C ++

Les scripts Bash sont très utiles et peuvent économiser beaucoup de temps de programmation. Alors, comment démarrez-vous un script bash dans un programme C++? Aussi, si vous savez comment faire en sorte que l'utilisateur devienne le super-utilisateur, ce serait bien aussi. Merci!

46
Kredns

Utilisez la fonction system.

system("myfile.sh"); // myfile.sh should be chmod +x
61
Mehrdad Afshari
#include <stdio.h>
#include <stdlib.h>

// ....


system("my_bash_script.sh");
16
rlbond

La seule manière dépendante de l'implémentation standard est d'utiliser la fonction system() de stdlib.h.

Aussi, si vous savez comment faire en sorte que l'utilisateur devienne le super-utilisateur, ce serait bien aussi.

Voulez-vous que le script s'exécute en tant que super-utilisateur ou souhaitez-vous é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.

9
dirkgently

StackOverflow: comment exécuter une commande et obtenir la sortie d'une commande en C++?

StackOverflow: (En utilisant une fourchette, un tuyau, sélectionnez): ... plus personne ne fait les choses à la dure ...

Aussi si vous savez comment faire en sorte que l'utilisateur devienne le super-utilisateur, ce serait bien aussi. Merci !

Sudo. su. chmod 04500. (setuid () & seteuid (), mais ils nécessitent que vous soyez déjà root. Par ex. chmod'ed 04 ***.)

Prends soin. Ceux-ci peuvent ouvrir "intéressant" trous de sécurité ...

Selon ce que vous faites, vous n'aurez peut-être pas besoin de root. (Par exemple: je vais souvent chmod/chown/dev périphériques (ports série, etc.) (sous racine Sudo) pour pouvoir les utiliser depuis mon logiciel sans être root. En revanche, cela ne fonctionne pas si bien lors du chargement/déchargement des modules du noyau ...)

5
Mr.Ree

Puisque c'est une assez vieille question, et cette méthode n'a pas été ajoutée (à part la fonction d'appel system()), je suppose qu'il serait utile d'inclure la création du 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;
}

Fondamentalement, en un mot (jeu de mots), nous définissons le nom du script, étoffons le script, les enfermons entre guillemets (tout en insérant des échappements appropriés pour ignorer les guillemets doubles dans le code Shell), puis en appelant le nom de ce script, qui dans cet exemple, SHELLSCRIPT utilise la fonction system() dans main().

2
Yokai