動作中のシェルコマンドはエイリアス化されません

動作中のシェルコマンドはエイリアス化されません

走れる、

 svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/!d' |xargs ls -altr --color=auto

問題ありません。しかし、これをエイリアスとして追加しようとすると (alias 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'

""実際には、シェル内で を解釈しようとするため、エラーが解消されるだけです!

引用符を元に戻す必要があるかもしれません (つまり、エイリアスを定義するために一重引用符を使用し、エイリアスされたコマンド内では二重引用符を使用し、必要に応じて一重引用符をエスケープします)。

答え2

!dコマンド内の はBash履歴拡張文字であるsedため、この問題が発生します。次のようにして、履歴拡張を一時的にオフにします。!

set -H
alias svtr="..."
set +H

それで大丈夫でしょう。

関連情報