使用bash从C执行一组命令而不将它们存储在文件中

时间:2012-06-02 21:06:06

标签: c linux bash

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

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

示例规则文件:

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

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

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

2 个答案:

答案 0 :(得分:1)

您也可以popen bash进程。

但是,您的方法还建议在您的应用程序中嵌入一些脚本解释器。您是否考虑嵌入,例如lua在里面?

答案 1 :(得分:0)

最简单的方法可能是使用sh -c "string containing commands to be executed"。嵌入式换行是多么棘手。如果命令本身不包含单引号,则可以将该多行字符串包装在单引号中。如果它可以包含单引号,那么您需要转义字符串以确保它们不变。

所以:

  • 将命令读入缓冲区
  • 对缓冲区进行转义处理;用'替换每个'\''(记住反斜杠必须在输出中,因此C中的字符串看起来像"'\\''"
  • 格式化命令:snprintf(command, sizeof(command), "sh -c '%s'", escaped_buffer);
  • 确保有足够的空间
  • 运行system(command);