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()
теряется в более поздний момент времени.
ОК, понял! –