1

我有

    #!/bin/sh

    func1()
    {
        echo "This is func1 from shell script"
    }

    func2()
    {
        echo "This is func2 from shell script"

    }

我想从 C 程序中调用 func1 和 func2。我可以这样做吗?

4

3 回答 3

7

这不太可能是一个好主意,但我想你可以这样写:

if (! fork()) { // TODO fork can return -1 on error; should check for that
    execl("/bin/sh", "-c", ". FILE && func1", (char *)NULL);
    // TODO should check to make sure execlp successfully replaced the process
}

其中FILE.sh定义func1. 以上将产生一个子进程,并用 Bash 的实例(或任何你的 shell)替换该子进程,并带有参数-c(意思是“要运行的脚本是下一个参数”)和. FILE && func1(这是脚本;这意味着“运行中的命令FILE,如果成功,则运行命令func1”)。

了解更多信息:

于 2013-01-25T05:57:29.317 回答
2

比使用 fork / exec 更简单的是 stdlib“系统”命令。

参见man 3 系统

假设您的 bash 函数在文件“/tmp/scripts.sh”中...

system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
于 2013-01-26T02:32:50.333 回答
0

如果你想接收执行脚本的退出代码,你应该使用 system,否则使用 vfork + exec*

于 2013-01-26T02:36:05.657 回答