当点击选项卡时,出现了shell初始化问题,getcwd出了什么问题?

160

我在Bash中按Tab键后出现错误信息,这是怎么回事?

symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
有时候,错误消息会是:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No s uch file or directory

如何解决shell初始化问题?

4个回答

301

通常情况下,这会发生在您当前的目录已经不存在的情况下。很可能是从另一个终端(在脚本或其他地方)中删除了该目录。为了消除这种情况,如果您的当前目录在此期间被重新创建了,请切换到另一个(存在的)目录,然后再切换回来;最简单的方法是:cd; cd -


3
我认为我的目录并不存在,也没有人重新创建它,我在 /root 目录下...所以问题可能与您所说的有些不同... - hugemeow
1
你能检查一下你的HOME环境变量吗?echo $HOME;如果它指向一个不存在的位置,那就是问题所在了。 - Costi Ciudatu
1
(我在tmux中使用shell)Tab键有时候可以正常工作,但是有时候当我用tmux创建新的tab,按下Tab键时,会出现这个错误,我不知道发生了什么事情:( - hugemeow
@kevinarpe 很好知道,谢谢!我一直以为它足够聪明,在“cd .”上什么也不做。 - Costi Ciudatu
2
@kevinarpe,是的,$PWD被POSIX保证已定义。请参见http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html。 - Charles Duffy
显示剩余2条评论

69

只需将目录更改为另一个,然后返回即可。可能该目录已被删除或移动。


7
偶然的机会,这是否发生在使用OverlayFS(或其他特殊文件系统类型)的目录上?
我刚遇到这个问题,我的交叉编译版本的bash将使用一个内部实现的getcwd,它与OverlayFS存在问题。 我在这里找到了有关此信息的信息:
引用: 看起来这可以追溯到bash中getcwd()的内部实现。 在交叉编译时,它无法检查malloc使用的getcwd(),因此它是谨慎的,并设置GETCWD_BROKEN并使用getcwd()的内部实现。 这个内部实现似乎不能很好地与OverlayFS一起使用。 {{link1:http://permalink.gmane.org/gmane.linux.embedded.yocto.general/25204}}
如果您正在构建bash并且您的C库确实malloc getcwd调用,则可以使用bash_cv_getcwd_malloc = yes进行配置和重建。

我通过进行完整的库更新来修复了我的错误。 - Richard Day

6

是的,cd;和cd-可以工作。

它能够实现这个功能的原因是,该目录被从任何其他终端或程序中删除并重新创建。因此,i-node条目被修改,因此程序无法访问旧的i-node条目。


我成功地在Ubuntu 14上修复了它,通过在这里进行完整的库更新:https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-16-04。 - Richard Day

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接