工作 shell 命令没有别名

工作 shell 命令没有别名

我可以跑,

 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

那就可以了。

相关内容