No ty mi dáváš teda... rouru musíš eskejpovat jako \| , případně dát celej příkaz do uvozovek, takže
mail_notify ps -aux \| grep syslog
nebo
mail_notify "ps -aux | grep syslog"
nicméně s rourou to hodí exit status pouze posledního příkazu v rouře, takže celý předělat takto:
DEFAULT_MAIL=mail@kdesi.cosi
VERBOSE=NO
IFS=''
params_count=$#;
params_array=( "$@" )
param=0
while [ $param -lt $params_count ]; do
if [ ${params_array[$param]} = "-v" ]; then
VERBOSE=YES
let param++
continue
fi
if [ ${params_array[$param]} = "-n" ]; then
VERBOSE=NO
let param++
continue
fi
if [ ${params_array[$param]} = "-a" ]; then
let param++
DEFAULT_MAIL=${params_array[$param]}
let param++
continue
fi
while [ $param -lt $params_count ]; do
command+=${params_array[$param]}" "
let param++
done
break
done
mail_body="Prikaz: $command\n"
origcommand=$command;
if [ $VERBOSE = "YES" ]; then
commandadd=" 2>&1; "
else
commandadd=" > /dev/null; "
fi
commandadd+='mypipe=(${PIPESTATUS[@]}); '
commandadd+='echo -e "\nVysledky:"; '
commandadd+='IFS="|"; '
commandadd+='read -r -a parts <<< "$origcommand"; '
commandadd+='for (( c=0; c<${#mypipe[@]}; c++)); do echo ${parts[$c]} : exit status ${mypipe[$c]} | sed -e "s/^[[:space:]]*//" | sed -e "
s/[[:space:]]*$//" ;done;'
if [ $VERBOSE = "YES" ]; then
mail_body+="\nVystup:\n"
fi
mail_body+=$(eval $command $commandadd)
echo -e $mail_body | mail -s "Hotovo: $(echo -e $origcommand)" $DEFAULT_MAIL
a na konci mailu ti to vypíše exit statusy všech částí roury po jedné.