!cp:$ 有什么作用?

!cp:$ 有什么作用?

我在我工作中的一个程序的文档中看到了这个命令:

cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$

我知道这:将阻止下一个命令的执行,它只会被评估,但是这是如何工作的$?我只见过$在变量名之前使用,例如$USERor$HOME但从未单独使用过。另外,如何!cp运作?不会执行吗cp?这样做的目的是什么?这整行有意义吗?

答案1

这是历史扩展,由 介绍!;必须$在这种背景下进行解释。!cp:$有两个部分,由 分隔:!cp是事件指示符,表示“查找以”开头的最新命令cp$是一个单词指示符,它的意思是“取所选命令中的最后一个单词(参数)”。

因此,假设(先前运行的命令)历史记录中的最后一个命令也是cp company-sso /usr/local/bin/company-sso!cp:$则替换为/usr/local/bin/company-sso,并且运行的命令是sudo chmod +x /usr/local/bin/company-sso

作为提及经过杰辛普夫,历史扩展在搜索与字符串匹配的先前命令时不考虑当前命令行,因此如果问题中的两个命令都在同一行中输入,则cp之前的命令;不是候选命令。这意味着您问题中给出的命令仅作为两行单独的行才真正有用:

cp company-sso /usr/local/bin/company-sso
sudo chmod +x !cp:$

:将停止执行下一个命令,它只会被评估”,但仅当:被用作命令时;它不适用于:命令行中存在的其他情况。:因为命令是外壳特殊内置,它总是成功,忽略它的论点;但确实会执行参数中的任何扩展,并且当遵循特殊内置规则时,也会保留变量赋值。 (Bash 默认情况下不应用此规则。)

相关内容