我创建了一个别名,用于将我所在的终端路径复制到剪贴板。
别名在我的.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