【问题标题】:Expanding a relative path to a full path when running a C program in shell在 shell 中运行 C 程序时将相对路径扩展为完整路径
【发布时间】:2012-10-06 23:49:38
【问题描述】:

当我的脚本需要与 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 的完整路径而不传递其完整路径?

【问题讨论】:

    标签: c bash argv shebang


    【解决方案1】:

    您的问题措辞不是很好,所以我不确定我是否回答了您提出的相同问题,但您可以使用 realpath() 函数将“./myScript”转换为其完整路径。

    【讨论】:

    • 谢谢!这就是我一直在寻找的。 realpath() 我应该用完整的工作代码编辑我的问题吗?
    • 但我想要,所以答案留作未来的例子。我的意思是,如果我想这样做,可以编辑问题还是应该将其添加为评论或其他内容?
    • 哦,当然,编辑问题没问题。只需在末尾追加,以“UPDATE:”开头
    【解决方案2】:

    据我了解,您正在实施脚本解析器/解释器。

    您在此处显示的main 函数已编译并链接到/home/user/git/proyect/test 可执行文件。我说的对吗?

    这意味着当你在终端上执行./myScript时,实际执行的是/home/user/git/proyect/test ./myScript

    如果是这种情况,@MK 的答案是正确的。并且使用realpath() 可以获得“./myScript”的绝对路径

    我建议编辑您的问题,使其更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-29
      • 2012-04-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2013-06-29
      • 2011-05-24
      • 1970-01-01
      相关资源
      最近更新 更多