2009-03-14 5 views

Antwort

46

Verwenden Sie die system-Funktion.

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

Danke, aber Sie haben vergessen, dies zu berücksichtigen: system ("./ myfile.sh"); – Kredns

+0

Es wird ohne funktionieren. wenn der Ordner in Ihrem Pfad ist :) –

+2

Das aktuelle Verzeichnis '.' sollte nicht * in Ihrem' $ PATH' sein. –

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

// .... 


system("my_bash_script.sh"); 
+3

Was wäre, wenn das Bash-Skript einen Text an tty zurückgeben würde? Z.B. Was wäre wenn es eine "Katze" wäre? Könnte das c-Programm diese Ausgabe haben? –

9

Der einzige Implementierung beauftragt Standard abhängig ist die system() Funktion von stdlib.h zu verwenden.

Auch wenn Sie wissen, wie man Benutzer zum Super-User wird, wäre das auch schön.

Soll das Skript als Super-User ausgeführt werden oder möchten Sie die Berechtigungen der ausführbaren Datei C erhöhen? Ersteres kann mit sudo gemacht werden, aber es gibt ein paar Dinge, die Sie wissen müssen, bevor Sie mit sudo gehen können.

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...

Auch wenn Sie wissen, wie Benutzer die Super-User werden zu lassen, das wäre auch schön. Vielen Dank!

sudo. su. chmod 04500. (setuid() & seteuid(), aber sie müssen bereits Root sein. E..g. chmod'ed 04 ***.)

Vorsicht. Diese können öffnen "interessant" Sicherheitslücken ...

Je nachdem, was Sie tun, müssen Sie möglicherweise nicht root. (Zum Beispiel: Ich werde oft chmod/chown/dev Geräte (serielle Ports, etc) (unter sudo root), so kann ich sie von meiner Software verwenden, ohne root.Auf der anderen Seite, das tut es nicht funktioniert so gut beim Laden/Entladen Kernel-Module ...)

0

Da dies eine ziemlich alte Frage ist, und diese Methode wurde nicht hinzugefügt (abgesehen von der system() Aufruf-Funktion) Ich denke, es wäre sinnvoll, zu erstellen das Shell-Skript mit der C-Binärdatei selbst. Der Shell-Code wird in der Quelldatei file.c gespeichert. Hier ist ein Beispiel für den Code ein:

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

Grundsätzlich auf den Punkt (Wortspiel beabsichtigt), definieren wir den Namen des Skripts, das Skript konkretisieren, sie in doppelte Anführungszeichen gesetzt (während richtige entkommt Einfügen doppelte Anführungszeichen ignorieren im Shell-Code) und dann den Namen dieses Skripts aufrufen, der in diesem Beispiel SHELLSCRIPT unter Verwendung der system()-Funktion in main() lautet.

Verwandte Themen