在shell中运行C程序时将相对路径扩展为完整路径

在shell中运行C程序时将相对路径扩展为完整路径,c,bash,argv,shebang,C,Bash,Argv,Shebang,当我的脚本需要与C可执行文件通信时,我遇到了一个问题。我无法获取脚本的完整路径,需要将其加载并发送到另一个进程 脚本的名称是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){

当我的脚本需要与C可执行文件通信时,我遇到了一个问题。我无法获取脚本的完整路径,需要将其加载并发送到另一个进程

脚本的名称是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;
 }
如果我从终端运行myScript

argv[0]显示可执行文件的路径,我想这是因为它是位于!的信息!。 argv[1]显示传递给可执行文件的第一个参数,即。 如果我使用./myScript作为参数,这就是我看到的相对路径 如果我使用/home/user/git/proyect/test/scriptFolder/myScript作为参数,它会显示我需要的绝对路径,但我不想每次都在终端中写入完整路径
所以我的问题是,在调用脚本时,如何获得myScript的完整路径而不传递其完整路径

您的问题措辞不太好,因此我不确定我是否回答了与您相同的问题,但您可以使用该函数将/myScript转换为其完整路径。

您的问题措辞不太好,因此我不确定我是否回答了与您相同的问题,但是您可以使用该函数将./myScript转换为其完整路径。

据我所知,您正在实现一个脚本解析器/解释器

这里介绍的主要函数已编译并链接到/home/user/git/proyect/test可执行文件。我说得对吗

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

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


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

据我所知,您正在实现一个脚本解析器/解释器

这里介绍的主要函数已编译并链接到/home/user/git/proyect/test可执行文件。我说得对吗

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

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


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

谢谢!这就是我要找的。realpath我应该用完整的工作代码编辑我的问题吗?但是我想要,所以答案将作为未来的示例。我的意思是,如果我想做的话,编辑问题是可以的,或者应该把它添加为评论或其他什么?哦,当然,编辑问题是可以的。只需在结尾追加,从更新开始:谢谢!这就是我要找的。realpath我应该用完整的工作代码编辑我的问题吗?但是我想要,所以答案将作为未来的示例。我的意思是,如果我想做的话,编辑问题是可以的,或者应该把它添加为评论或其他什么?哦,当然,编辑问题是可以的。只需在末尾追加,从更新开始:
#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;
 }