execl을 사용하여 C 프로그램에서 쉘 스크립트 실행

execl을 사용하여 C 프로그램에서 쉘 스크립트 실행

내 C 코드에서 간단한 쉘 스크립트를 실행하려고 합니다.

단순화를 위해 다른 모든 것을 제거했습니다.

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#define SHELL "/bin/sh"
int main()
{


execl("/home/amir/Desktop/OSAssignment/script.sh","script.sh",NULL);



        return 0;
}

내 C 프로그램과 script.sh는 Desktop->OSAssignment->에 있습니다.

프로그램을 컴파일하고 실행했는데 아무것도 표시되지 않습니다(exec 명령 아래 또는 위에 printf 문을 넣으면 성공적으로 인쇄됩니다).

이것은 내 쉘 스크립트 파일입니다

echo "Hi"

답변1

명시적 인터프리터 없이 실행된 스크립트는 실행 가능해야 하며 올바른 #!-line을 가지고 있어야 합니다.

-line 이 없거나 #!실행할 수 없는 경우 인터프리터를 사용하여 다음과 같이 스크립트를 실행해야 합니다.

sh /path/to/script.sh

execl()또한 호출이 실패했는지 확인 하려면 반환 코드를 확인해야 합니다 . 실패하면 perror()오류 메시지 인쇄를 사용할 수 있습니다. perror시스템의 설명서를 참조하십시오 .

답변2

다음 문서를 읽어보세요실행(3)그리고실행(2)(에 의해 호출됨 execl). 실패할 수 있습니다(이것이 반환할 수 있는 유일한 방법입니다. 이러한 함수는 프로세스의 전체 가상 주소 공간을 변경하기 때문에 성공 시 반환되지 않습니다).

그래서 코드는 (사용하여오류(3)):

 execl("/home/amir/Desktop/OSAssignment/script.sh","script.sh",NULL);
 perror("execl script.sh");

스크립트를 실행 가능하게 만들어야 하며 다음으로 끝나야 합니다.셰르본. 첫 번째 줄은 다음과 같아야 합니다.#!/bin/sh

사용하는 각 기능에 대한 설명서를 주의 깊게 읽으십시오.

관련 정보