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 回答