我有
#!/bin/sh
func1()
{
echo "This is func1 from shell script"
}
func2()
{
echo "This is func2 from shell script"
}
我想从 C 程序中调用 func1 和 func2。我可以这样做吗?
这不太可能是一个好主意,但我想你可以这样写:
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
”)。
了解更多信息:
比使用 fork / exec 更简单的是 stdlib“系统”命令。
参见man 3 系统。
假设您的 bash 函数在文件“/tmp/scripts.sh”中...
system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
如果你想接收执行脚本的退出代码,你应该使用 system,否则使用 vfork + exec*