代わりに「gi」をスクリプトに変えてください
例:/home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "[email protected]"
ファイルを実行可能としてマークすることを忘れないでください。
ここでの提案は、xargs を避け、xargs の代わりに「while read」ループを使用することです:
find -name \*bar\* | while read file; do gi foo "$file"; done
ファイル名のスペースまたは改行を処理するための改良点については、上記のリンクで承認された回答を参照してください。
エイリアスはシェル固有です。この場合、おそらく bash 固有です。エイリアスを実行するには、bash を実行する必要がありますが、エイリアスはインタラクティブ シェル (より正確には .bashrc
対話型シェルでのみ読み取られます)。
bash -i 対話型シェル (およびソース .bashrc) を実行します。bash -c cmd cmd を実行します .
それらをまとめる:bash -ic cmd cmd を実行します cmd の対話型シェルで .bashrc
で定義された bash 関数/エイリアスにすることができます .
find -name \*bar\* | xargs bash -ic gi foo
あなたがやりたいことをするべきです。
編集:質問に「tcsh」のタグを付けたようです。そのため、bash固有のソリューションは適用できません。 tcsh では、-i
は必要ありません 、 -f
を指定しない限り、.tcshrc を読み取るように見えるため .
これを試してください:
find -name \*bar\* | xargs tcsh -c gi foo
私の基本的なテストではうまくいきました。