У меня есть следующие (упрощенные) попытки кода в двух сценариях оболочки ниже.
Сценарий вызывает сценарий R, в котором запускается код, который генерирует стандартный вывод и поток ошибок в зависимости от того, что происходит.
Я пытаюсь добиться того, чтобы как вывод, так и поток ошибок отображались на консоли, как обычно, но когда сценарий запускается и происходит сбой (например, RScript создает поток ошибок), я хочу сохранить это сообщение об ошибке, которое генерирует R в базе данных sqlite, но по-прежнему имеет нормальный вывод и ошибки, отображаемые на консоли, а также при выходе. Я пробовал много форм перенаправления вывода функции Rscript, но либо ничего не сохранял в базе данных (кроме номера строки), либо я мог сохранить сообщение об ошибке, но ничего не было помещено в консоль...
Это не сохранит сообщение об ошибке в БД (номер строки сохранится), но все будет на консоли
updateDBwhenError() {
sqlite3 "myDB.db" "INSERT INTO logs VALUES('$1')"
}
err_report() {
#Tryign to capture both line error and message
updateDBwhenError "Error Line $1 $2"
exit
}
trap 'err_report ${LINENO}' ERR
Rscript testScript.R
Это сохранит сообщение об ошибке в БД, но на консоли больше ничего не будет.
updateDBwhenError() {
sqlite3 "myDB.db" "INSERT INTO logs VALUES('$1')"
}
err_report() {
#Tryign to capture both line error and message
updateDBwhenError "Error Line $1 $rErr"
exit
}
trap 'err_report ${LINENO}' ERR
rErr=$(Rscript testScript.R 2>&1)
Я везде искал способ записать только поток ошибок в переменную и сохранить вывод нетронутым на консоли (как вывод, так и ошибку), но я застрял :)
Грц, П.Дж.