#!/bin/sh
func1()
{
echo "This is func1 from shell script"
}
func2()
{
echo "This is func2 from shell script"
}
我想打電話給FUNC1和FUNC2從C程序。我可以這樣做嗎?
#!/bin/sh
func1()
{
echo "This is func1 from shell script"
}
func2()
{
echo "This is func2 from shell script"
}
我想打電話給FUNC1和FUNC2從C程序。我可以這樣做嗎?
這不可能是一個好主意,但我想你可以寫這樣的事情:
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
的名稱。上面將生成一個子進程,並用參數-c
(意思是「要運行的腳本是下一個參數」)和. FILE && func1
(它是腳本;參數爲0)替換該進程的Bash實例(或任何你的shell)。這意味着「運行FILE
中的命令,如果成功,則運行命令func1
」)。
更多信息:
比使用叉稍微簡單一些/ EXEC是STDLIB 「系統」 命令。
請參閱man 3 system。
假設你的bash功能文件「/tmp/scripts.sh」 ......
system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
如果你想recive執行腳本的退出代碼,你應該使用系統,否則使用的vfork + exec *
除非你正在編寫一個可加載的內置,否。 – ormaaj
@ormaaj你有多確定? – abc
@ormaaj您能否詳細說明可裝入的內建函數? – abc