Ano*_*est 14 shell bash shell-script file-copy
我在我工作中的一个程序的文档中看到了这个命令:
cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$
Run Code Online (Sandbox Code Playgroud)
我知道这:
会阻止执行下一个命令,它只会被评估,但这如何工作$
?我只见过$
在变量名之前使用过,例如$USER
or$HOME
但从来没有单独使用过。还有,怎么操作!cp
?不会执行cp
?这样做的目的是什么?这整条线有意义吗?
Ste*_*itt 26
这是历史扩展,由!
; 在$
必须在这方面进行intepreted。!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
。
正如jschimpf所提到的,在搜索与字符串匹配的先前命令时,历史扩展不考虑当前命令行,因此如果问题中的两个命令都在同一行中输入,则before不是候选者。这意味着您的问题中给出的命令只会作为两个单独的行真正有用:cp
;
cp company-sso /usr/local/bin/company-sso
sudo chmod +x !cp:$
Run Code Online (Sandbox Code Playgroud)
“:
将停止执行下一个命令,它只会被评估”,但仅当:
用作命令时;它不适用于:
命令行中存在的其他情况。:
作为命令是一个特殊的shell 内置,它总是成功,忽略它的参数;但是确实会执行参数中的任何扩展,并且当遵循特殊内置函数的规则时,也会保留变量赋值。(默认情况下,Bash 不应用此规则。)
归档时间: |
|
查看次数: |
952 次 |
最近记录: |