How do I do return-value error handling in the middle of a pipeline?
I'd ideally like to keep this to as basic a shell level as possible,
plain (Bourne) sh-compatible if it can be done, though a bash or zsh
solution will be fine if not. I'm tring to write a simple script that
will apply a command to all processes matching a name--sort of a
generalized "killall". At the moment, it looks like this:
#!/bin/sh
name=$1
shift
ps aux | grep $name | grep -v grep | grep -v $0 | awk '{ print $2 }' |
xargs $@
and it works fine, and I'd like to keep it at that level of
simplicity. The only thing is, I'd like to make it stop and return 1
if there are no matching processes. (At the moment, it calls the
command with an empty argument list.) The intuitive thing to do seems
to be
ps aux | grep $name | grep -v grep | ( grep -v $0 || exit 1 ) | awk '{
print $2 }' | xargs $@