在C程序中获取shell脚本的退出代码

时间:2017-06-13 18:11:32

标签: c linux shell unix exit-code

我有一个shell脚本,其中包含以下行:

if [ $elof -eq 1 ];
then exit 3
else if [  $elof -lt 1 ];then
    exit 4
else
    exit 5
fi
fi

在我的C程序中,我使用popen来执行这样的脚本:

char command[30];
char script[30];
scanf("%s", command);
strcpy(script, "./myscript.sh ");
strcat(script, command);
FILE * shell;
shell = popen(script, "r");
if(WEXITSTATUS(pclose(shell))==3) {
   //code
}
else if(WEXITSTATUS(pclose(shell))==4){
  //code
}

现在,如何获取脚本的退出代码?我尝试使用WEXITSTATUS,但它不起作用:

WEXITSTATUS(pclose(shell))

1 个答案:

答案 0 :(得分:3)

After you have closed a stream, you cannot perform any additional operations on it.

在文件对象上调用write后,您不应该致电pclosepclose甚至pclose

FILE *表示您已完成0,它将释放所有基础数​​据结构(proof)。

第二次调用它可以产生任何效果,包括... int r = pclose(shell); if(WEXITSTATUS(r)==3) { printf("AAA\n"); } else if(WEXITSTATUS(r)==4) { printf("BBB\n"); } else { printf("Unexpected exit status %d\n", WEXITSTATUS(r)); } ...

您的代码应如下所示:

localhost