findの-execオプションでのエイリアスgrep

findの-execオプションでのエイリアスgrep

これにはこれらのエイリアスがあります。~/.bashrc

alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'

ただし、実行すると効果がなく、find ... -exec grep ...常にこれらのオプションを手動で提供する必要があります。

findオプションパラメータに依存関係エイリアスを知らせる方法はありますか?-exec他のエイリアスではなく設定ファイルを考えています。

どのような面では安全ではないでしょうか?

答え1

これらのエイリアスは使用できません。エイリアスは、長いコマンドシーケンスで最初に使用される場合にのみ機能し、シェルはデフォルトでエイリアステキストを実際のコマンドに置き換えます。コマンドを入力すると、シェルは最初にエイリアスを検索し、次に関数などを検索します。コマンドシーケンスの途中でエイリアスを使用すると、コマンドの置き換え/エイリアスの置き換えは機能しません。

また、フラグ-execfind常にバイナリを実行する別のプロセスを生成し、エイリアスやハードコーディングされた関数ではありません。

答え2

一部のシェルでは、コマンドラインのどこからでもエイリアスを拡張できます。例えばzshグローバルエイリアスalias -g 'grep=grep --color=auto -H'

ただし、対話型シェルがbashの場合、エイリアスはコマンドの最初の単語として表示されたときにのみ拡張されるため、呼び出しをシェルにラップしてファイルをgrep読み取ることができるようにシェルを呼び出す必要があります。~/.bashrc、インタラクティブシェルセッションと同じです。

例えば

find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +

AFAIKどのように安全ではありませんが、少しオーバーヘッドがあり、必要なオプションをgrepに直接供給するよりも便利ではありません。

関連情報