2014-12-01 3 views
0

나는 하나의 bash 스크립트를 작성했으며 이제이 스크립트를 C 프로그램에서 호출하고있다. 이제 명령 줄에서 스크립트에 argv[1]argv[2] 등의 인수를 전달하고 싶습니다.C 프로그램의 명령 행 인수를 bash 스크립트로 전달하는 방법은 무엇입니까?

+5

일부 코드를 표시해야합니다. 그것은 C 프로그램에서 스크립트를 호출하는 데 사용하는 프로그램에 따라 다르지만 대부분 시스템 호출의'exec *()'패밀리에있는 것입니다. 이러한 지원은 상당히 간단한 방식으로 명령 행 인수를 전달합니다. 실제로 ** 이러한 시스템 호출을 사용할 때 커맨드 라인 인자를 전달해야합니다 **. 그러므로 나는 당신이 어떤 어려움을 겪고 있는지 알지 못합니다. – Celada

답변

3

스크립트가 호출되는 방식에 따라 다릅니다. 그 결과

으로

C

#include "stdio.h" 

void main(int argc, char const *argv[]) 
{ 
    if (argc == 2) { 
     char command[100] = {0}; 

     sprintf(command, "./example.sh %s", argv[1]); 
     system(command); 
    } 
} 

배쉬

#!/bin/bash 

echo $1 

: 당신이 system를 사용하는 경우 예를 들어, 명령 줄 인수를 추가 시스템 호출에서 bash는 스크립트를 호출하는 데 사용되는 문자열을 사전 형식화 할 수 있습니다

$ gcc example.c -o example && ./example Hello! 
Hello! 
+0

'system()'사용은 안전하지 않습니다. 'argv [1]'에 공백이나 쉘 메타 문자가 들어 있다면? – Celada

+0

이것은 단지 예입니다. 추가 보안 및 안정성 검사를 구현하는 것은 작성자의 책임입니다. – Stanislav

+2

동의하지 않습니다. 나는 우리 전문가들에게'system()'대신에'fork()'+'execve()'와 같은 안전한 인터페이스를 추천 할 것을 믿습니다. 우리가'system()'을 추천한다면 사람들은 그것을 사용하고 안전하지 않은 코드를 작성할 것이다. – Celada

관련 문제