Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Slightly OT: Error-Handling in a Pipeline, preferably non-zsh



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 $@

but that doesn't work. Any ideas? (I could, of course, simply cache the last grep's results in a tmpfile, test its length, and proceed accordingly, but that doesn't seem quite as elegant.
--
Aaron Davies
agdavi01@xxxxxxxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author