Shell cding时自动修复路径

Shell cding时自动修复路径,shell,zsh,symlink,prompt,Shell,Zsh,Symlink,Prompt,我的主目录与辅助驱动器进行了符号链接。当我在主目录中打开终端时,有时会产生解析符号链接的不幸效果。因此,我的提示从~/somedir/转到/Volumes/hdd/home/myuser/somedir/ 我试图在ZSH中通过使用chpwd_函数来解决这个问题: 显然,它不起作用,因为它会导致递归循环 正确的解决方案是什么?两种可行的解决方案。或者 将您家的正式位置更改为/Volumes/hdd/home/myuser/somedir/。至少在Linux上,这种变化会发生在/etc/passwd

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

我试图在ZSH中通过使用chpwd_函数来解决这个问题:

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


正确的解决方案是什么?

两种可行的解决方案。或者

将您家的正式位置更改为/Volumes/hdd/home/myuser/somedir/。至少在Linux上,这种变化会发生在/etc/passwd内部或类似的地方,我不确定OSX的情况。这应该使任何行为良好的应用程序只使用正确的目录作为主目录,其中包括Zsh。 您还可以仅在shell中更改$HOME的值。在~/.zshenv包括

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

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。

另外,chpwd_functions+=fix_home_path是向hook添加函数的更清晰的方法。啊!谢谢你的提醒,切普纳,谢谢!如果我可以问的话,你的符号链接需要什么?我使用它是为了方便访问,但它显然缺乏与文件系统相关的功能,因为它只在ZSH级别上解决。我发现将我的主目录保存在单独的驱动器/分区上更容易。它有助于系统重建,并让我拥有快速ssd和大型硬盘。虽然现在这一点已经不那么令人担忧了,但这基本上是第一点
zsh -f # new zsh with default configuration values.
setopt PROMPT_SUBST
function myfunc() { date }
export PROMPT=' \"$(myfunc)\" %~ ' # single quotes, NOT double quotes!