1

我有一个程序以单个规则文件的形式接受一组规则。

当我的程序认为满足其中一个条件时,我试图将与条件关联的命令块视为需要执行的独立 bash 脚本。我宁愿不处理将这些命令存储在文件中,因为这会留下不受欢迎的攻击向量。有没有办法将 bash 命令的行分隔列表作为一个组提供给 bash?我希望 bash 脚本中的条件和其他内容能够正常运行,而不仅仅是单独执行每一行。

示例规则文件:

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

当 CONDITION 为真时,我希望能够将四行 bash 代码作为一组 bash 命令运行,而不是彼此独立,这由我的 C 程序确定。

显然这是来自 Linux,使用 C 作为编程语言。

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 回答