Using zsh functions with xargs
I want to call a zsh function with xargs
, but the arguments passed to xargs
don't run in your environment.
$ function hi() { echo "hello world $@" }
$ hi person!
hello world person!
$ seq 3 | xargs hi
xargs: hi: No such file or directory
No such file or directory!? hi
is a function, but xargs
doesn't see it. With a combination of environment variables, function output and zsh command execution, we can use that function with xargs.
First let's read the definition of our function into an environment variable.
$ FUNCS=$(functions hi); echo $FUNCS
hi () {
echo "hello world $@"
}
Now we can use that in combination with zsh -c
to execute the function with xargs.
$ FUNCS=$(functions hi); seq 3 | xargs -I{} zsh -c "eval $FUNCS; hi {}"
hello world 1
hello world 2
hello world 3
This solution is messy but workable.
Tweet