![工作 shell 命令没有别名](https://linux22.com/image/1320905/%E5%B7%A5%E4%BD%9C%20shell%20%E5%91%BD%E4%BB%A4%E6%B2%A1%E6%9C%89%E5%88%AB%E5%90%8D.png)
我可以跑,
svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/!d' |xargs ls -altr --color=auto
很好。但是当我将其添加为别名(别名 svtr="...")时,我收到一条错误消息...
-bash: !d': event not found
有任何想法吗?
答案1
使用反斜杠\
来转义应该!
可以工作。
alias svtr="svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/\!d' |xargs ls -altr --color=auto"
alias svtr
alias svtr='svn status |grep -v .jasper$ |cut -d '\'' '\'' -f8 |sed '\''/.*\..*/\!d'\'' |xargs ls -altr --color=auto'
实际上,这只是消除了错误,因为""
shell 内部会尝试解释!
。
您可能需要还原引号(即,使用单引号定义别名,并在别名命令中使用双引号,并在必要时转义单引号。
答案2
!d
命令中的导致sed
此问题,因为!
是 Bash 历史记录扩展字符。暂时关闭历史记录扩展,如下所示:
set -H
alias svtr="..."
set +H
那就可以了。