C언어에서 본쉘로 짠 스크립트 처리 방법
조회수 2447회
C언어에서 bash script를 사용하려고 합니다. bash스크립트 파일을 실행시키는 것이 아니라
아래 소스와 같이 bash script를 define문으로 정의한 후 프로그램 자체에서 실행시키려고 하는데 생각처럼 실행이 되지 않네요
#define RESSHELL "/bin/sh -c '\
OS_CHECK_CMD=uname\r\n\
echo $OS_CHECK_CMD\r\n\
OS_CHECK_CMD_PATH=`command -v $OS_CHECK_CMD`\r\n\
echo $OS_CHECK_CMD_PATH\r\n\
'\
"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define MAXLINE 256
int main()
{
FILE *fp;
int state;
char buff[MAXLINE];
fp = popen(RESSHELL, "r");
if (fp == NULL)
{
perror("erro : ");
exit(0);
}
while(fgets(buff, MAXLINE, fp) != NULL)
{
printf("%s", buff);
}
state = pclose(fp);
}
위의 코드를 실행시키면 /usr/bin/uname이 출력되어야하는데 공백이 출력이 됩니다.
OS_CHECK_CMD_PATH=`command -v $OS_CHECK_CMD`\r\n\
이 부분에서 OS_CHECK_CMD_PATH에 결과값이 저장이 안되는거 같은데 어떻게 해야 할까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
CENTOS 7.4 에서 테스트해봤습니다.
// test.c #include <stdio.h> #include <stdlib.h> #define SHELLSCRIPT "\ #/bin/bash \n\ OS_CHECK_CMD=uname \n\ echo $OS_CHECK_CMD \n\ OS_CHECK_CMD_PATH=\"command -v $OS_CHECK_CMD\" \n\ echo $OS_CHECK_CMD_PATH \n\ " int main() { system(SHELLSCRIPT); return 0; }
[allinux@lgcare01 ~]$ ./test uname command -v uname
댓글 입력