如何从C程序调用bash shell脚本中定义的函数

时间:2013-01-25 05:37:08

标签: c++ c linux bash shell

我有

    #!/bin/sh

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

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

    }

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

3 个答案:

答案 0 :(得分: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的{​​{1}}文件的名称。上面将生成一个子进程,并用参数func1(意思是“要运行的脚本是下一个参数”)和{{1}用一个Bash实例(或任何你的shell)替换该子进程(这是脚本;它表示“在-c中运行命令,如果成功,则运行命令. FILE && func1”。

了解更多信息:

答案 1 :(得分:2)

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

请参阅man 3 system

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

system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");

答案 2 :(得分:0)

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