C언어에서 본쉘로 짠 스크립트 처리 방법


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에 결과값이 저장이 안되는거 같은데 어떻게 해야 할까요?

  • 2017년 09월 28일에 작성됨

조회수 161


1 답변


좋아요
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
  • 2017년 09월 28일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close