ZSH 为别名中的 PWD 输出着色

ZSH 为别名中的 PWD 输出着色

注意:是的,这是在 Mac OS 11.6.2 Big Sur 上。

现在我在.zshrc文件中使用了 zsh 别名,以便于终端导航。我想尝试为 PWD 输出着色,但实际输出的是上一个目录。我添加了一个额外的 PWD 命令来显示当前目录,但着色的始终是最后一个目录:

alias goto-config="cd ~/checkouts/trunk/service/configs;pwd;echo -e '\n\e[1;32m $(pwd) \e[0m\n'"


实际输入/输出:

User.Me % goto--config
/Users/Me/checkouts/trunk/service (this line is standard text color) 

/Users/Me/directory/from/which/command/was/called (this line is in color)

预期输入/输出:

User.Me % goto--config
/Users/Me/checkouts/trunk/service (this line is standard text color) 

/Users/Me/checkouts/trunk/service (this line is in color)

所以,我很困惑。我以为 $(pwd) 的回显会回显我们刚刚导航到的目录路径,就像上面显示的一样。我做错了什么?

谢谢!

答案1

虽然我没有真正的解决方案,因为我目前无法访问 MacOS 系统,但我仍然会写下答案,为您提供不同的可能的解决方法。


将路径存储在变量中

alias asdf="dir=~/checkouts/trunk/service/configs ; cd $dir ; pwd ; echo -e '\n\e[1;32m $(echo $dir) \e[0m\n'"

在此示例中,路径将从 获取$dir,而不是从 获取的输出pwd


使用/bin/pwd

MacOS 似乎包含该pwd命令的不同实现。您可以尝试使用/bin/pwd所述这里


使用pwd -P

通常默认情况下pwd只打印 的内容$PWD。你可以用标志告诉它-P打印物理位置:

pwd: pwd [-LP]
Print the name of the current working directory.

Options:
  -L    print the value of $PWD if it names the current working
    directory
  -P    print the physical directory, without any symbolic links

By default, `pwd' behaves as if `-L' were specified.

使用 zsh 函数

您可以在文件内部创建一个函数.zshrc而不是别名:

goto-config() 
{
    cd ~/checkouts/trunk/service/configs
    pwd
    echo -e "\n\e[1;32m $(pwd) \e[0m\n"
}

如果其中一种方法确实有效,请告诉我。

相关内容