【发布时间】:2016-05-27 05:41:56
【问题描述】:
我正在做一个项目,遇到了一个小问题。它被设计成一个简单的外壳,现在,我正在输入内置命令(pwd、cd、exit)。除了 CD 之外,我已经完成了所有工作。
解析有效,命令和参数的不同部分被放入一个数组中,所以现在我有这个:
void cd()
{
chdir(commands[1].c_str());
reset();
}
我使用该目录中的有效路径运行它,但它不会改变。我错过了什么?
谢谢!
【问题讨论】:
-
如果它不起作用,请检查
chdir和errno的返回状态,它会告诉你哪里出了问题。您对正在 cd'ing 的目录有执行权限吗? -
@MichaelAlbers 刚刚尝试过,添加了 errno.h 标头并在同一个函数中为其添加了 cout,没有返回任何内容,所以看起来我在任何地方都没有收到任何错误。编译时没有警告,一切正常
-
你是什么意思“没有返回”?根据定义,chdir 返回一个 int。你的意思是它返回零?你怎么知道目录没有变化?
-
@MichaelAlbers 是的,返回 0。
-
chdir()系统调用不会影响 shell 的环境变量,因此尤其不会影响PWD。当您执行cd时,常规shell 会设置$PWD中的值;$PWD中的值不会改变,除非 shell 改变它。
标签: c++ shell unix terminal chdir