2017-06-13 4 views
1

ich ein Shell-Skript, das die folgenden Zeilen enthält:gibt es die Exit-Code von einem Shell-Skript, in einem C-Programm

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

In meiner C-Programm I popen verwenden Sie das Skript wie folgt auszuführen:

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 
} 

Nun, wie bekomme ich den Exit-Code des Skripts? Ich versuchte WEXITSTATUS verwenden, aber es funktioniert nicht:

WEXITSTATUS(pclose(shell)) 
+0

Was Sie zeigt genug Kontext nicht geben. Bitte zeigen Sie einen vollständigen Code mit der erwarteten und tatsächlichen Ausgabe. – dbush

+1

Zeige mehr von deinem C-Code ... btw, du solltest nur 'WEXITSTATUS()' verwenden, wenn 'WIFEXITED()' evaluiert * true * –

+0

Ich habe meinen C-Code bearbeitet. –

Antwort

3

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

Sie nicht read oder write nennen sollte oder sogar pclose, nachdem Sie pclose auf einem Dateiobjekt namens!

pclose bedeutet, dass Sie mit der FILE * fertig sind und es wird alle zugrunde liegenden Datenstrukturen frei (proof).

Wenn Sie es das zweite Mal aufrufen, kann alles ausgegeben werden, einschließlich 0.

Der Code sollte wie folgt aussehen:

... 
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)); 
} 
... 
Verwandte Themen