2009-03-14 9 views
32

Bashスクリプトは非常に便利でプログラミング時間を大幅に節約できます。では、C++プログラムでbashスクリプトをどのように起動しますか?また、ユーザーがスーパーユーザーになる方法を知っていれば、それもいいでしょう。ありがとう!C++プログラムからbashスクリプトを実行する方法

答えて

46

system機能を使用してください。

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

ありがとうございますが、これを含めるのを忘れてしまった:system( "./ myfile.sh"); – Kredns

+0

それは動作しません。フォルダがあなたのパスにある場合:) –

+2

現在のディレクトリ '.' *はあなたの' $ PATH'にあるべきではありません。 –

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

// .... 


system("my_bash_script.sh"); 
+3

bashスクリプトが何らかのテキストをttyにエコーするとどうなりますか?例えば。もしそれが "猫"だったら? Cプログラムにその出力がありますか? –

9

のみ標準義務付け実装に依存する方法はstdlib.hからsystem()機能を使用することです。

また、ユーザーをスーパーユーザーにする方法もわかっていると、それもいいでしょう。

スクリプトをスーパーユーザーとして実行するか、C実行可能ファイルの権限を昇格しますか?前者はsudoで行うことができますが、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...

また、ユーザーがまたいいだろう、スーパーユーザーになるようにする方法を知っていれば。ありがとう!

sudoの。スー。 chmod 04500.(setuid()& seteuid()、しかし、あなたはすでにrootになっている必要があります)

注意してください。これらは、「興味深い」セキュリティホールを開くことができます...

あなたは何をしているかによって、ルートを必要としない場合があります。 (例えば:chmod/chown/devデバイス(シリアルポートなど)(sudo root)私は自分のソフトウェアからrootでなくても使うことができます。

0

これはかなり古い質問なので、このメソッドは追加されていません(system()呼び出し関数を除いて)。作成することを含めると便利だと思いますシェルスクリプトはCバイナリ自体を持っています。シェルコードはfile.cソースファイル内に格納されます。ここでは、コードの例です:

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

は基本的には、(しゃれが意図した)一言で言えば、我々は、スクリプト名を定義するスクリプトを肉付け、二重引用符で囲むされている(二重引用符を無視するように、適切なエスケープを挿入しながらこのスクリプトの名前を呼び出すと、この例ではSHELLSCRIPTとなり、system()関数はmain()になります。

関連する問題