【问题标题】:Auto fix path when cdingcding 时自动修复路径
【发布时间】:2013-11-11 20:48:45
【问题描述】:

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

我尝试在 ZSH 中使用 chpwd_functions 来解决这个问题:

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

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

什么是正确的解决方案?

【问题讨论】:

  • 顺便说一句,chpwd_functions+=( fix_home_path ) 是一种更清晰的向钩子添加函数的方法。
  • 啊!谢谢@chepner 的提醒,感谢!
  • 如果我可以问,您的符号链接需要什么?我使用named directories 方便访问,但是(显然)缺少与文件系统相关的功能,因为它仅在 ZSH 级别上解决。
  • 我发现将主目录保存在单独的驱动器/分区上更容易。它有助于系统重建,让我拥有快速 ssd 和大型 hdd 之类的东西。 (尽管这些天来这变得不那么令人担忧了,所以它主要是第一点)

标签: shell zsh symlink prompt


【解决方案1】:

两种可行的解决方案。要么

  1. 将您家的(官方)位置更改为/Volumes/hdd/home/myuser/somedir/。至少在 Linux 上,更改会发生在 /etc/passwd 或类似的地方,我不确定 OSX。这应该使任何表现良好的应用程序只使用正确的目录作为主目录,其中包括 Zsh。
  2. 您也可以仅在您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多