为什么我创建的别名没有在我期望的路径中执行?

Why does the alias I have created not execute in the path I am expecting?

我创建了一个别名,目的是在终端中将我所在的路径复制到剪贴板。

别名在我的 .zshrc 文件中。

别名如下所示:

alias cpath="echo -n `pwd`|pbcopy"

当我在终端中执行以下命令时,它始终有效:

echo -n `pwd`|pbcopy

但是,当我使用别名 cpath 时,它会复制我第一次打开特定终端时的路径。例如,如果我在 /Users/tommyrharper 目录中打开一个终端,然后我 运行 cpath,它会将以下路径复制到我的剪贴板:/Users/tommyrharper.

如果我然后 cd 进入我的 Documents 文件夹,然后 运行 cpath,那么它仍然只是将 /Users/tommyrharper 添加到我的剪贴板。

但是如果我直接 运行 echo -n `pwd`|pbcopy 它会添加 /Users/tommyrharper/Documents 到我的剪贴板。

如果我最初在 /Users/tommyrharper/Documents 中打开一个终端,然后我 运行 cpath,那么它会将 /Users/tommyrharper/Documents 添加到我的剪贴板。

但话又说回来,如果我 cd 进入我的 Notes 目录,然后我 运行 cpath,它仍然只是将 /Users/tommyrharper/Documents 添加到我的剪贴板.

为什么我的别名的行为方式与我在终端中直接输入命令时的行为方式不同?

有没有办法让我的别名按预期工作?

发生这种情况是因为您的别名 (`pwd`) 中的反引号命令替换在 zsh 启动时获得 运行 .zshrc。这是因为您使用了双引号,它计算替换。

您可以通过 运行ning alias cpath 确认这一点,这将显示别名的定义,现在应该包含路径而不是文字 `pwd`

如果您改为使用单引号(不评估替换)来定义您的别名:

alias cpath='echo -n `pwd`|pbcopy'

它将按预期工作。

可以在此处找到有关不同引用样式和替换的更多详细信息:https://mywiki.wooledge.org/Quotes