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