我有一个程序,它以单个规则文件的形式接受一组规则。
当我的程序认为满足其中一个条件时,我试图将与条件相关的命令块视为需要执行的独立bash脚本。我宁愿不处理将这些命令存储在文件中,因为这会留下不受欢迎的攻击向量。有没有办法将bash命令的行分隔列表作为单个组进行bash?我希望如果bash脚本中的条件和其他内容能够正常运行,而不仅仅是单独执行每一行。
示例规则文件:
if CONDITION
some nice
bash commands
pkill some process
./launching something!
endif
我希望能够将四行bash代码作为一组bash命令运行,而不是彼此独立,当CONDITION为true时,由我的C程序确定。
显然这是来自Linux,使用C作为编程语言。
答案 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);