我一直在研究一个自定义 shell 脚本,并且在使用下面给出的代码重定向输出时遇到了一个小错误。在当前状态下,代码可以完美运行,但是当传递给 execvp args 时,会抛出错误,例如:(ls ">" no such file or directory)。我知道这是因为它将整个 args[] 传递给父 shell,而父 shell 不起作用。添加 args[j] = NULL 会消除“<”/ ">”,从而修复错误,但也会导致重定向不再起作用。我怎样才能让它不抛出错误而且还能正常工作?我已经阅读了这个问题的多个版本,但似乎找不到答案。预先感谢您的任何帮助。
switch (fork()){
case -1:
fprintf(stderr, "error forking");
case 0://CHILD
for(int j = 0; j < size; j++){
if(!strcmp(args[j], "<")){//looking for input character
++ext;
if((in = open(args[j+1], O_RDONLY)) < 0){//open file for reading
fprintf(stderr, "error opening file\n");
}
dup2(in, STDIN_FILENO);//duplicate stdin to input file
close(in);//close after use
//args[j] = NULL;
}//end input chech
if(!strcmp(args[j],">")){//looking for output character
++ext;
out …
Run Code Online (Sandbox Code Playgroud)