【问题标题】:chdir in a custom shell in UnixUnix 中自定义 shell 中的 chdir
【发布时间】:2016-05-27 05:41:56
【问题描述】:

我正在做一个项目,遇到了一个小问题。它被设计成一个简单的外壳,现在,我正在输入内置命令(pwd、cd、exit)。除了 CD 之外,我已经完成了所有工作。

解析有效,命令和参数的不同部分被放入一个数组中,所以现在我有这个:

void cd()
{
  chdir(commands[1].c_str());

  reset();
}

我使用该目录中的有效路径运行它,但它不会改变。我错过了什么?

谢谢!

【问题讨论】:

  • 如果它不起作用,请检查chdirerrno 的返回状态,它会告诉你哪里出了问题。您对正在 cd'ing 的目录有执行权限吗?
  • @MichaelAlbers 刚刚尝试过,添加了 errno.h 标头并在同一个函数中为其添加了 cout,没有返回任何内容,所以看起来我在任何地方都没有收到任何错误。编译时没有警告,一切正常
  • 你是什么意思“没有返回”?根据定义,chdir 返回一个 int。你的意思是它返回零?你怎么知道目录没有变化?
  • @MichaelAlbers 是的,返回 0。
  • chdir() 系统调用不会影响 shell 的环境变量,因此尤其不会影响 PWD。当您执行cd 时,常规shell 会设置$PWD 中的值; $PWD 中的值不会改变,除非 shell 改变它。

标签: c++ shell unix terminal chdir


【解决方案1】:

comment:

可以看出目录不会改变,因为在我运行 PWD 之后,(getenv("PWD")),它仍然显示启动程序的原始目录。

您正在错误地检查当前工作目录。见chdir() not affecting environment variable PWD

不要使用getenv("PWD"),而是使用getcwd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2019-12-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多