将 tcsh 别名转换为 zsh

将 tcsh 别名转换为 zsh

我有一个tcsh别名如下:

alias cdd 'cd `dirname \!*`'

我用它来将目录更改为包含特定文件的目录。

例如,

cdd /Users/myself/Document/Folder/File.pdf

会将目录更改为/Users/myself/Document/Folder/.

我怎样才能将其“转换”为zsh外壳?

答案1

在shell 中,您可以定义一个 shell 函数,将工作目录更改为第一个参数的父目录(下面代码中的zsh尾部从存储在变量中的路径名中删除最后一个路径名组件,并且是功能)::h$1

cdd () cd -- $1:h

或者,您可以使用更便携的 shell 函数(可以在任何sh类似 shell 中工作,包括zshbash):

cdd () { cd -- "$(dirname -- "$1")"; }

这使用可移植的 shell 函数语法,并dirname像您的tcsh别名一样使用。如果参数以破折号开头,则两个函数中出现的双破折号可以防止将参数解释为选项。

如果不给定参数,上面的两个函数都会更改为当前目录(即几乎不执行任何操作)。

我建议使用 shell 函数,因为别名在非 shell 中不接受参数tcsh。因此,您无法检查“别名的第一个参数”中的路径名来确定其父目录。

相关内容