2

スクリプトが 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だから私の質問は、スクリプトを呼び出すときにフルパスを渡さずにフルパスを取得するにはどうすればよいですか?

4

2 に答える 2

4

あなたの質問はあまりうまく表現されていないので、あなたが尋ねているのと同じ質問に答えているかどうかはわかりませんが、 realpath()関数を使用して「./myScript」をフルパスに変換できます。

于 2012-10-16T19:37:12.257 に答える
0

私が理解しているように、スクリプトパーサー/インタープリターを実装しています。

ここmainで提示する関数はコンパイルされ、実行可能ファイルにリンクされ/home/user/git/proyect/testます。私は正しいですか?

つまり./myScript、端末で実行すると、実際に実行されるのは/home/user/git/proyect/test ./myScript.

この場合、@MKの答えは正しいです。そしてrealpath()、「./myScript」の絶対パスを取得できます

質問を読みやすく編集することをお勧めします。

于 2012-10-16T19:43:15.400 に答える