为什么我创建的别名没有按照我期望的路径执行



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

别名在我的.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添加到我的剪贴板中。

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

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

之所以会发生这种情况,是因为当zsh启动.zshrc时,别名(`pwd`(中的backtick命令替换会运行。这是因为您使用了双引号,用于评估替换。

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

如果你用单引号定义你的别名(不计算替换(:

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

它将按预期工作。

有关不同引用样式和替换的更多详细信息,请点击此处:https://mywiki.wooledge.org/Quotes

最新更新