h + 検索モードに入ることで、端末履歴をすばやく検索できるエイリアスがあります。
alias h='history | /usr/bin/grep '
これはうまくいきますが、grepインスタンスを追加しないと、より多くの検索パターンを追加することはできません。例えばh pacman | grep wine
他の可能なパラメータを検索パターンに変換するように調整したいと思います。例えばh pacman wine
観察:これを達成するための既製の解決策があることを知っていますが、どうすればいいかわからないので学びたいです。
答え1
これを行うには、シェルエイリアスの代わりにシェル関数が必要です。
function h() {
code="cat ~/.bash_history"
for arg in $@ ; do
code="$code | grep $arg"
done
eval "$code"
}
.bashrc
この関数は、エイリアスディレクティブまたは通常エイリアスディレクティブを作成する任意の場所に配置できます。
答え2
ここで重要なのは、複数のモードの場合、通常はオプションを使用して各モードを指定するgrep
必要があることです(ただ)。 2つのオプション:-e
grep -e pacman -e wine
grep pacman wine
エイリアスはパラメータをサポートしていないため、次の関数が使用されます。
h () { local args=() # local array to store argument with -e for grep for i do args+=(-e "$i") # tack on the -e for each argument done history | grep "${args[@]}" }
これはすべてのパラメータがモードであると仮定します
grep
。エイリアスを引き続き使用し、
-e
独自のエイリアスを追加します。h -e pacman -e wine
grep
このようにして、他のオプションを追加することもできます(たとえば、-C 3
結果の周囲にいくつかのコンテキストを表示するなど)。