我需要从C/C++程序中在Bash环境中定义一个Bash函数。在贝类攻击之前,我可以这样定义一个函数:
my_func='() { echo "This is my function";}'或与C程序等效:
setenv("my_func", "() { echo \"This is my function\";}", 1);或
putenv("my_func=() { echo \"This is my function\";}");但是使用Bash版本修复using休克,我无法管理如何在环境中定义我的函数。
奇怪的是,如果我运行env,我可以看到在环境中定义的函数,但是如果我调用它,Bash说它不存在。
提前感谢
发布于 2014-10-10 16:11:46
如果您使用bash调用execv (因此您只调用它一次),您可以替换(为了解释目的使用execl ):
execl("/bin/bash", "bash", "file_to_run", "arg1", "arg2", 0);使用
execl("/bin/bash", "bash", "-c", "f() {...} g() {...}\n. $0",
"file_to_run", "arg1", "arg2", 0);然后您就不需要使用内部bash接口来定义函数了。(如果运行中的bash脚本也需要导出函数,则只需将export -f <func>行添加到-c后面的参数中即可。)
这样做的优点是既可以处理补丁,也可以处理未修补的便签。
(我不得不为不同的节目做一个类似的补丁,所以我和你一样痛苦。)
https://stackoverflow.com/questions/26293949
复制相似问题