我正在linux中构建自己的伪shell。
我正在使用execv
来运行通常由linux shell完成的命令。
我有大多数命令正常工作,但我不知道如何使用{。{1}}和'./'命令来运行其他程序。有谁知道怎么做?
任何建议都会有所帮助。
答案 0 :(得分:1)
./不是命令,它是当前目录的路径。听起来你应该使用execvp(file, argv)
,而不是execv(path, argv)
。
更新以添加:更具体地说,如果您的文件名包含'/',execvp不会搜索PATH。这有效,例如:
#include <unistd.h>
#include <stdio.h>
int main(void)
{
execvp("./hello.sh", NULL);
}
我在当前目录中有hello.sh
,用gcc test.c
编译代码,运行./a.out
并打印“hello world”。 ''不在我的路径中。
答案 1 :(得分:-1)
您可以使用Posix函数:exec(3)。您可以在here找到该手册。
一个建议是记住检查exec(3)的返回值。大多数时候它不起作用,因为你使用的参数不正确。