2012-10-16 6 views
2

스크립트가 C 실행 파일과 통신해야 할 때 문제가 있습니다. 스크립트의 전체 경로를 가져올 수 없으므로로드하고 다른 프로세스로 보내야합니다.쉘에서 C 프로그램을 실행할 때 상대 경로를 전체 경로로 확장

  • argv[0]

    가 실행 년대를 보여줍니다 스크립트의 이름은 myScript

    #!/home/user/git/proyect/test 
    
    hello this 
    
    is a 
    script 
    

    내가 터미널에서 myScript를 실행하면 이는 C 실행

    #include <stdio.h> 
    
    int main (int argc, char *argv[]){ 
        int count; 
    
        printf ("Este programa fue llamado con: \"%s\".\n",argv[0]); 
        if (argc > 1){ 
         for (count=1; count<argc; count++){ 
          printf("argv[%d] = %s\n", count, argv[count]); 
         } 
        } 
        else{ 
         printf("The command had no other arguments.\n"); 
        } 
        return 0; 
    } 
    

    의 소스 코드 경로 (나는 그것이의 정보이기 때문에있다라고 생각한다.).

  • argv[1]
  • 이 실행에 전달 된 첫 번째 인수를 보여줍니다 즉
    • 내가 인수로 ./myScript를 사용하는 경우 , 즉 내가 인수로 /home/user/git/proyect/test/scriptFolder/myScript를 사용하는 경우 내가 (상대 경로)
    • 을 볼 것입니다, 그것은 보여줍니다 (I가 필요하지만, 내가 터미널의 전체 경로마다 시간을 쓰고 싶지 않아 무엇을) 절대 경로

그래서 내 질문에, 나는 통과하지 않고 myScript의 전체 경로를 얻는 방법 그것의 전체 경로 whe 스크립트 호출?

답변

3

귀하의 질문에 대한 답변이 너무 많아서 묻는 질문에 답할 수 없지만 realpath() 기능을 사용하여 "./myScript"를 전체 경로로 변환 할 수 있습니다.

+0

감사합니다. 그것이 내가 찾고 있었던 것이다. realpath() 전체 작업 코드로 내 질문을 편집해야합니까? – Leo

+0

@Leo 꼭 할 필요는 없습니다. –

+0

하지만 나는 미래의 모범으로 응답을 유지하고 싶다. 내 말은, 내가 원한다면 편집 문제는 괜찮습니까? 아니면 주석이나 다른 것으로 추가해야합니까? – Leo

0

나는 당신이 스크립트 파서/인터프리터를 구현하고있는 것으로 알고있다.

여기에있는 main 기능은 컴파일되어 실행 파일 /home/user/git/proyect/test과 연결됩니다. 내가 맞습니까?

즉, ./myScript을 터미널에서 실행하면 실제로 실행되는 것은 /home/user/git/proyect/test ./myScript입니다.

@ MK의 대답이 옳다면. realpath()을 사용하면 "./myScript"의 절대 경로를 얻을 수 있습니다.

질문을 더 읽기 쉽게 편집 할 것을 제안합니다.

관련 문제