我有一个用户提供的脚本,如
#!/bin/sh
some_function () {
touch some_file
}
some_other_function () {
touch some_other_file
}
我想从c-code调用some_other_function函数。
我明白,我可以简单地编写像
这样的shell脚本#!/bin/sh
source userscript.sh
some_other_function
并使用system()执行它,但我正在寻找一个更优雅,尤其是更通用的解决方案,它允许我执行任意命名的函数,甚至可以让我获取/设置变量。
答案 0 :(得分:3)
您不能直接从C执行此操作。但是,您可以使用system
从C运行命令(如sh
):
// Run the command: sh -c 'source userscript.sh; some_other_function'
system("sh -c 'source userscript.sh; some_other_function'");
(请注意,sh -c 'command'
允许您在shell中运行command
。)
或者,您也可以使用execlp
或exec
系列中的其他功能:
// Run the command: sh -c 'source userscript.sh; some_other_function'
execlp("sh", "sh", "-c", "source userscript.sh; some_other_function", NULL);
(请注意,在使用exec
函数时,第一个参数 - "sh"
- 必须重复)
答案 1 :(得分:1)
从评论中,我了解到您想要调用脚本中定义的几个函数之一。如果将函数作为shell脚本的参数提供,并且在最后一行中只有
,则可以执行此操作$1
然后您可以将脚本调用为
sh userscript.sh some_function