12.02.2015

Красивое отображение статусов команд в bash-скрипте

Объявляем функцию, которой скармливаем результат последней команды ($1) и текст ($2):
function check_error() {
  if [[ "${1}" -eq 0  ]]  
then echo  -e "$2:\t\e[1;32m[OK]\e[0m"  
else echo  -e "$2:\t\e[1;31m[ERROR]\e[0m"  
fi 
}

И после нужно команды вызываем ее:
rm -f file 
check_error $? "Removing file"
=============================================

Перехват ошибок в сислог.

set -e # fail on any error
set -u # treat unset variables as errors
# ======[ Trap Errors ]======#
set -E # let shell functions inherit ERR trap
# Trap non-normal exit signals:
# 1/HUP, 2/INT, 3/QUIT, 15/TERM, ERR
trap err_handler 1 2 3 15 ERR
function err_handler {
local exit_status=${1:-$?}
logger -s -p "syslog.err" -t "ootync.deb" "supersh.deb script '$0' error code $exit_status (line $BASH_LINENO: '$BASH_COMMAND')"
exit $exit_status
}
your_command some args
===========================================

Как логировать одновременно и в консоль и в сислог

Сначала объявляем функцию:

log() { logger -t scriptname "$@"; echo "$@"; }

затем в месте, где нужно логировать вызываем ее, передавая в качестве параметра текст:

log "text to be logged";