У меня есть сценарий (например, compute.sh), который что-то делает на моем Ubuntu 16.04 и может закончиться ошибкой, скажем:
[compute.sh]
#!/bin/bash
...
MISCELLANEOUS OPERATIONS
...
[if error occours]
echo "Error 55a" >&2;
exit 1;
...
echo "Execution ok";
exit 0;
и другой сценарий, который обрабатывает ошибки (например, error_handler.sh)
[error_handler.sh]
error=$(cat)
for i in "$@"
do
case $i in
-u=*|--user=*)
username="${i#*=}"
shift
;;
-t=*|--task=*)
task="${i#*=}"
shift
;;
esac
done
...
SENDS ERROR REPORTING THROUGH AN API LISTENING REMOTELY
...
Я хотел бы выполнить compute.sh, перенаправив его stderr на error_handler.sh, чтобы уведомить мою систему API об ошибке
если я попробую этот тест:
user@ubuntu: echo "test message" | ./error_handler.sh --user=dude --task="simple task"
мой сценарий error_handler.sh принимает строку «тестовое сообщение» и правильно ее обрабатывает
как я могу перенаправить только вывод stderr в мой сценарий error_handler.sh?
РЕДАКТИРОВАТЬ: поскольку иногда compute.sh может завершиться ошибкой без сообщения об ошибке (просто выполнив exit 1;) Я не уверен, что если error = $ (cat), это правильный способ поймать сообщение об ошибке в error_handler.sh. Любой другой вариант?
EDIT2: задача может быть выполнена в crontab, поэтому мне нужно сделать все в одной команде
cron
- это просто строка, которая передается вsh -c
; он может состоять из нескольких команд, разделенных;
,&
и т. д. 10.04.2018