Мой код:
int ushExCd(Cmd cmd){ // BuiltIn shell command implementation
char * home = "HOME";
int returnVal = 1;
if(cmd->nargs > 1){ // target directory is specified in args[1]
returnVal = chdir(cmd->args[1]);
}else{ // target directory is not specified, use "HOME" instead
returnVal = chdir(getenv(home));
}
if(-1 == returnVal){
perror("cd");
}
return 1;
}
Использование отладчика llvm для проверки returnVal
сразу после его назначения показывает, что его значение равно 0 (хотя оно инициализировано равным 1), но выполнение p (char*)getenv("PWD")
в отладчике сразу после системного вызова chdir()
показывает, что каталог не изменился.
Я использовал Xcode, но затем я попытался использовать оболочку bash и tcsh, используя компиляторы gcc, но безрезультатно.
Что еще более интересно, тот же фрагмент кода успешно работает в оболочке, которую реализовал другой человек, что может указывать на неправильную реализацию оболочки, но тогда я отлаживаю прямо внутри этого фрагмента кода, и chdir()
не должно потеряться. в более поздний момент времени.