После некоторых исследований я получил некоторый прорыв. А именно, вы можете настроить exit_handler
, который может определить, был ли вызов выхода, просто просмотрев последнюю команду.
#! /bin/bash
exit_handler() {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit " >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
Это напечатает
it was an explicit exit
Теперь для того, чтобы сказать родителям, а вторя, можно скорее записать в файл, именованный канал или любой другой.
В соответствии отметить из choroba, exit
без аргумента даст implicit call
, который, по общему признанию, так как неправильно exit
(без аргумента) является такой же, как exit $?
. По этой причине регулярное выражение должно учитывать это:
#! /bin/bash
exit_handler() {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit \|^exit$" >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
Не знаю, о чем я знаю. почему ты хочешь сделать это? –
Просто выйдите с другим значением, отличным от 0, чтобы указать выход. – choroba
@EtanReisner Скажем, я создаю оболочку для других скриптов. – Pithikos