1

単一のルール ファイルの形式で一連のルールを受け入れるプログラムがあります。

条件の 1 つがプログラムによって満たされていると見なされると、条件に関連付けられたコマンドのブロックを、実行する必要がある独立した bash スクリプトとして処理しようとします。これらのコマンドをファイルに保存すると、望ましくない攻撃ベクトルが残るため、対処したくありません。行区切りの bash コマンドのリストを 1 つのグループとして bash する方法はありますか? 各行をそのまま実行するだけでなく、bashスクリプトのif条件やその他のものが正しく機能することを望みます。

ルール ファイルの例:

if CONDITION
some nice
bash commands
pkill some process
./launching something!
endif

私のCプログラムによって決定されるように、CONDITIONがtrueの場合、4行のbashコードを互いに独立してではなく、bashコマンドのグループとして実行できるようにしたいと考えています。

明らかに、これは C をプログラミング言語として使用する Linux からのものです。

4

2 に答える 2

1

また、おそらくプロセスでpopenある可能性があります。bash

ただし、あなたのアプローチは、アプリケーション内にスクリプトインタープリターを埋め込むことも提案しています。その中にluaなどを埋め込むことを検討しましたか?

于 2012-06-03T06:29:12.523 に答える
0

最も簡単な方法は、おそらく を使用することsh -c "string containing commands to be executed"です。注意が必要なのは、埋め込まれた改行です。コマンド自体に一重引用符が含まれていない場合は、その複数行の文字列を一重引用符で囲むことができます。一重引用符を含めることができる場合は、文字列をエスケープして、それらが変更されないようにする必要があります。

そう:

  • コマンドをバッファに読み込む
  • バッファーでエスケープ処理を行います。'それぞれを置き換えます'\''(バックスラッシュが出力に含まれている必要があるため、Cの文字列は次のようになります"'\\''"
  • コマンドをフォーマットします。snprintf(command, sizeof(command), "sh -c '%s'", escaped_buffer);
  • 十分なスペースがあることを確認してください
  • 走るsystem(command);
于 2012-06-02T21:26:09.803 に答える