내 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
사용하는 각 기능에 대한 설명서를 주의 깊게 읽으십시오.