web-dev-qa-db-ja.com

C ++プログラムからbashスクリプトを実行する方法

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

46
Kredns

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

実装に依存する標準的な唯一の標準的な方法は、_stdlib.h_のsystem()関数を使用することです。

また、ユーザーをスーパーユーザーにする方法を知っていれば、それもナイスです。

スクリプトをスーパーユーザーとして実行しますか、それともC実行可能ファイルの特権を昇格しますか?前者はSudoで実行できますが、Sudoを使用して出発する前に知っておく必要があることがいくつかあります。

9
dirkgently

StackOverflow:C++内でコマンドを実行してコマンドの出力を取得する方法

StackOverflow:(fork、pipe、selectを使用):...誰もそれ以上難しいことをしません...

また、ユーザーをニースにするスーパーユーザーになる方法を知っているなら。ありがとう!

須藤。 su。 chmod 04500.(setuid()&seteuid()、ただし、rootである必要があります。例:chmod'ed 04 ***。)

世話をする。これらは「興味深い」セキュリティホールを開く可能性があります...

何をしているのかによっては、rootは必要ないかもしれません。 (たとえば:chmod/chown/devデバイス(シリアルポートなど)(Sudo root) rootにならずにソフトウェアからそれらを使用できます。一方、カーネルモジュールをロード/アンロードする場合はうまく機能しません...)

5
Mr.Ree

これはかなり古い質問であり、このメソッドは(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;
}
_

基本的に、一言で言えば(しゃれを意図)、スクリプト名を定義し、スクリプトを肉付けし、二重引用符で囲み(シェルコード内の二重引用符を無視する適切なエスケープを挿入しながら)、そのスクリプトの名前を呼び出しますこの例では、system()main()関数を使用したSHELLSCRIPTです。

2
Yokai