私は持っている
#!/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
-c
. FILE && func1
FILE
func1
詳細については:
fork / exec を使用するよりも少し簡単なのは、stdlib の "system" コマンドです。
man 3 systemを参照してください。
あなたのbash関数がファイル「/tmp/scripts.sh」にあると仮定します...
system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
実行中のスクリプトの終了コードを受け取りたい場合は、system を使用する必要があります。それ以外の場合は、vfork + exec* を使用します。