我有一个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 中工作,包括zsh
和bash
):
cdd () { cd -- "$(dirname -- "$1")"; }
这使用可移植的 shell 函数语法,并dirname
像您的tcsh
别名一样使用。如果参数以破折号开头,则两个函数中出现的双破折号可以防止将参数解释为选项。
如果不给定参数,上面的两个函数都会更改为当前目录(即几乎不执行任何操作)。
我建议使用 shell 函数,因为别名在非 shell 中不接受参数tcsh
。因此,您无法检查“别名的第一个参数”中的路径名来确定其父目录。