2012-10-16 49 views
2

我的腳本需要與C可執行文件進行通信時出現問題。我無法獲取腳本的完整路徑,我需要將其加載併發送到另一個進程。在Shell中運行C程序時將相對路徑展開爲完整路徑

腳本的名稱是myScript

#!/home/user/git/proyect/test 

hello this 

is a 
script 

,這是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; 
} 

的源代碼如果我運行從終端myScript

  • argv[0]示出可執行文件的路徑(我想這是因爲它是在的信息)。
  • argv[1]顯示傳遞給可執行文件的第一個參數,即
    • 如果我用./myScript作爲參數,這是我所看到的(相對路徑)
    • 如果我用/home/user/git/proyect/test/scriptFolder/myScript作爲參數,它顯示了絕對路徑(這是我所需要的,但我不想每次都寫在終端的完整路徑)

所以我的問題是,如何獲取的myScript的完整路徑,而不及格它的完整路徑whe ñ調用腳本?

回答

3

您的問題措辭不是很好,所以我不確定我是否回答了您所問的同一問題,但可以使用realpath()函數將「./myScript」轉換爲完整路徑。

+0

謝謝!這正是我所期待的。 realpath() 我應該用完整的工作代碼編輯我的問題嗎? – Leo

+0

@你不需要。 –

+0

但我想,所以答案保持作爲未來的例子。我的意思是,如果我想這樣做,編輯問題是好的,或者應該添加它作爲評論或什麼? – Leo

0

據我所知,你正在實現一個腳本解析器/解釋器。

您在此處顯示的main函數已編譯並鏈接到/home/user/git/proyect/test可執行文件。我對嗎?

這意味着當您在終端上執行./myScript時,實際執行的是/home/user/git/proyect/test ./myScript

如果是這樣的話@ MK的答案是正確的。並與realpath()你可以得到「./myScript」的絕對路徑

我會建議編輯你的問題更具可讀性。

相關問題