次のコマンドをbashエイリアスに変換するにはどうすればよいですか?
find . -name '*.php' | xargs grep --color -n 'search term'
ファイル拡張子を指定でき、「検索語」は明らかに検索語です:)
だから私がしたいのは:
searchFiles 'php' 'search term'
入力をエイリアスに渡すにはどうすればよいですか?bashスクリプトを作成し、エイリアスがスクリプトを指すようにする必要がありますか?
関数を使ってみてはどうですか?これを .bashrc に追加します。
function searchFiles() {
find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2"
}
そしてそれを次のように使用します:
$ searchFiles c include
エイリアスを使用することもできますが、Gonzalo が示しているように関数を使用するのは賢明なことです。
alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ -
関数でもエイリアスでも、findおよびxargsと一緒に使用-print0
することをお勧めします。これにより、より堅牢なファイル名処理 (最も一般的にはファイル名のスペース) が提供されます。-0
関数が機能している間は、他のプログラムやスクリプトから呼び出すことはできません (苦労することはありません)。(エイリアスにも同じ問題があります。) 直接呼び出したいように聞こえるので、別のスクリプトを選択することをお勧めします。
#!/bin/bash
# since you're already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)
INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .
(あなたが持っているものを見つける必要はありません。)
これが直接ではなく別のスクリプト内でのみ使用された場合、関数はより簡単になります。
シェル関数は優れていますが、ackも参照してください。ファイル固有の検索を色分けして処理するため、例は単純になります
ack --php somepattern