我正在尝试编写一个基本的 shell,它可以用 c 语言解释简单的命令,如日期、ls。
我首先获取这样的 PATH 变量,然后将其传递给 execv() 函数。
const char *name = "PATH";
char *value;
value = getenv(name)
我打印出这个值,我得到了这个:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
请注意,我正在使用virutalbox 来运行Ubuntu。这是我用来尝试简单 ls 命令的代码。在下面的代码中,变量行是用户编写的实际命令,在我们的例子中是“ls”
pid_t pid, wpid;
int status;
pid = fork();
if (pid == 0) {
// Child process
if (execv(value, line) == -1) {
perror("lsh");
}
exit(EXIT_FAILURE);
}
else if (pid < 0) {
// Error forking
perror("lsh");
}
else {
// Parent process
do {
wpid = waitpid(pid, &status, WUNTRACED);
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
我得到的结果是这样的:
lsh: no such file or directory
有任何想法吗?