我应该用 C 编写一个简单的自定义 shell,它可以只使用“<”和“>”命令来处理重定向。
为此,我解析每个命令(在字符串数组中),检查字符“<”和“>”,然后打开一个文件名open(fd, filename, flags)
以读取或写入。
如果我发出这些命令(其中 % 表示我的 shell),我希望得到以下输出:
% echo hello > output.txt
% cat output.txt
hello
但是,当我发出这些命令以及任何命令时,它似乎忽略(但不忽略?)我的重定向。当我发出相同的命令时会发生这种情况:
% echo hello > output.txt
% cat output.txt
hello > output.txt
奇怪的是,它确实创建了一个名为“output.txt”的文件,并向其写入“hello > output.txt”
输入和输出重定向器都会发生这种情况。这里只是打开和执行输出命令的代码。
int fd;
open_write_file(&fd, commands[index]);
dup2(fd, 1);
execvpe(commands[0], commands, envp);
close(fd);
请注意,open_write_file()
打开带有标志的文件名O_WRONLY | O_TRUNC | O_CREAT, S_RUSR | S_IRGRP | S_IWGRP | S_IWUSR
并进行错误检查以确保它正确打开。我该如何解决这个问题并让它真正执行我想要的真正命令?