如何从C的shell脚本执行函数

时间:2014-04-14 19:41:59

标签: c bash shell

我有一个用户提供的脚本,如

#!/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()执行它,但我正在寻找一个更优雅,尤其是更通用的解决方案,它允许我执行任意命名的函数,甚至可以让我获取/设置变量。

2 个答案:

答案 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。)

或者,您也可以使用execlpexec系列中的其他功能:

// 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