execve() を介して複数のコマンドを (または単純な出力リダイレクトを使用して) 実行しようとしています。
これを配置すると (もちろん、この文字列を関数に渡す前に、スペースに分割し、それぞれを char* [] に分けます):
"bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' "
execve() 関数に、エラーが発生しました:
/usr/bin/cat: -c: 行 0: 一致する「」を探しているときに予期しない EOF が発生しました
/usr/bin/cat: -c: 1 行目: 構文エラー: 予期しないファイルの終わり
これは、正確にexecve() 関数を使用して複数の Linux コマンド (PATH にあるアプリケーション) を実行するという私の提案です(セキュリティ上の理由から)。
しかし、このソリューションは期待どおりに機能しません。
私のソリューションを修正するアイデアはありますか? それ以外の場合は execve() を使用できるかもしれませんが、方法がわかりません..
編集:簡略化されたソースコードを追加しました(申し訳ありませんが、会社の制限により、元の形式で貼り付けることはできません)ソースコード:
int foo(const char *cmdline)
{
char d[] = "bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' ";
args = strtok(d, " ");
counter = 0;
while (args != NULL)
{
cmdline_args[counter++] = args;
args = strtok(NULL, " ");
}
cmdline_args[counter] = '\0';
switch (pid = fork()) {
case -1:
ret = -1;
case 0: // for execve
status = execve(cmdline_args[0], cmdline_args, env);
exit(status);
default: // for parent pid
if (waitpid(pid, &status, 0) < 0) {
// in case when waitpid failed
}
}
return ret;
}