我正在用 C 编写一个基本的 shell,我已经实现了所有的重定向运算符,但是,当我尝试重定向“cd”时,我遇到了这个问题:
cd 在没有任何输出重定向的情况下完美运行,但是
当我试图做这样的事情时:
cd inexistant_directory > output_file
输出文件不是在 bash 中创建的,运行该命令会重定向标准输出,正如我之前所说的,使用外部命令的重定向运算符效果很好
当我遇到 cd 命令时,我调用
char*path = get_path(parameters); //implemented by me, works on rest of the cases
int ret =chdir(path);
我不在子进程中调用它,而是在父进程中调用它(shell进程本身)
我究竟做错了什么 ?
谢谢,
PS:我运行它的操作系统是 Ubuntu 12.10 但是,代码是 POSIX 兼容的
LE:我无法发布整个代码,因为它大约有 600 行,
这是我的逻辑
if(internal_command) {
//do quit, exit or cd
} else if (variable_assignemt){
//do stuff
} else {
// external command
pid = fork();
if(pid == -1) {
//crash
} else if (pid == 0) {
do_redirects()
call_external_cmd
}
default :
wait(pid, &status);
所以,我认为要解决这个问题,我需要在parrent(shell进程)中重定向stdout并在执行命令后恢复它