cding时自动修复路径

时间:2013-11-11 20:48:46

标签: shell zsh symlink prompt

我的主目录符号链接来自辅助驱动器。当我在主目录中打开终端时,这有时会解析符号链接,这会产生不幸的影响。因此,我的提示从~/somedir/转到/Volumes/hdd/home/myuser/somedir/

我试图通过使用chpwd_functions来解决这个问题:

function fix_home_path() {
  cd $HOME${PWD##$(cd $HOME; pwd -P)}
}
chpwd_functions=(${chpwd_functions[@]} "fix_home_path")

显然,它不起作用,因为它会导致递归循环。

什么是正确的解决方案?

1 个答案:

答案 0 :(得分:0)

两种有效的解决方案。任

  1. 将您家的(官方)位置更改为/Volumes/hdd/home/myuser/somedir/。至少在Linux上,更改会发生在/etc/passwd内或类似的地方,我不确定OSX。这应该使任何表现良好的应用程序只使用正确的目录作为主页,并包括Zsh。
  2. 您也可以仅在shell中更改$HOME的值。在~/.zshenv包括

    export HOME=/Volumes/hdd/home/myuser/somedir/

  3. Zsh会正确处理提示扩展。

    PS:如果您希望在提示符中进行奇特/奇怪的扩展,可以定义一个函数并将其返回值包含在提示中。例如,在提示中包含日期的复杂方式:

    zsh -f # new zsh with default configuration values.
    setopt PROMPT_SUBST
    function myfunc() { date }
    export PROMPT=' \"$(myfunc)\" %~ ' # single quotes, NOT double quotes!
    

    这将为每个提示显示调用函数myfunc