コマンドパラメータを履歴検索モードに変換

コマンドパラメータを履歴検索モードに変換

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つのオプション:-egrep -e pacman -e winegrep pacman wine

  1. エイリアスはパラメータをサポートしていないため、次の関数が使用されます。

    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

  2. エイリアスを引き続き使用し、-e独自のエイリアスを追加します。

     h -e pacman -e wine
    

    grepこのようにして、他のオプションを追加することもできます(たとえば、-C 3結果の周囲にいくつかのコンテキストを表示するなど)。

関連情報