101 lines
1.8 KiB
Bash
Executable file
101 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
: <<=cut
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
neno - no error no output
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
B<neno> I<command1> [\; I<command2> ...]
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
B<neno> will print the output from both standard output and standard
|
|
error if the composed command returns an error. If the composed
|
|
command returns true, the output will be ignored. This is useful for
|
|
cron jobs where you only want output if it failed.
|
|
|
|
|
|
=head1 EXAMPLE
|
|
|
|
Give output for missing file:
|
|
|
|
neno ls /missing-file
|
|
|
|
No output if file exists:
|
|
|
|
neno ls /bin/sh
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
Copyright (C) 2017 Ole Tange,
|
|
http://ole.tange.dk and Free Software Foundation, Inc.
|
|
|
|
|
|
=head1 LICENSE
|
|
|
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
at your option any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
B<man>
|
|
|
|
|
|
=cut
|
|
|
|
print() {
|
|
cat $TMP/stdout >&3
|
|
cat $TMP/stderr >&4
|
|
}
|
|
|
|
cleanup() {
|
|
rm -rf $TMP
|
|
return $?
|
|
}
|
|
|
|
control_c() {
|
|
# Run if user hits control-C
|
|
# >&4 is the non-redirected stderr
|
|
echo >&4
|
|
print
|
|
echo -en "\n$0: CTRL-C hit: Exiting.\n" >&4
|
|
cleanup
|
|
exit $?
|
|
}
|
|
|
|
# trap keyboard interrupt (control-c)
|
|
trap control_c SIGINT
|
|
|
|
TMP=$(mktemp -d /tmp/no-error.XXXXX)
|
|
exec 3>&1 4>&2
|
|
eval $* 2>$TMP/stderr >$TMP/stdout
|
|
ERROR=$?
|
|
if [ $ERROR == 0 ] ; then
|
|
# skip
|
|
true
|
|
else
|
|
print
|
|
fi
|
|
cleanup
|
|
exit $ERROR
|