zsh (少なくともver.5.0.7)ではxargsコマンドで自作シェル関数が使えない。
.zshrcでmyfuncという関数を定義している場合、
$ ls hoge | xargs myfunc
を実行すると
xargs: myfunc: そのようなファイルやディレクトリはありません
となる。
そこでxargsを実行する際にドットコマンドを用いてmyfunc関数が定義してある.zshrcを一回ずつ一々読み込むようにする。
$ ls hoge | xargs -I{} zsh -c ". ~/.zshrc; myfunc {}"
ここで
-I{} zsh -c ". ~/.zshrc; myfunc {}"
はxargsで複数のコマンドを実行するやり方で、実行される度に. ~/.zshrc
と標準出力の引数を{}
に渡しmyfunc
が実行される。
bashではexport -f
を使えばこのようなことをしなくても済むっぽい。
http://d.hatena.ne.jp/wristed/20120603/1338691396
ただしここで紹介したやり方ではbashでも使えると思う。