Ответ 1
Сделайте каскадные ловушки. exit 127
запускает ловушку EXIT
и устанавливает код выхода на 127, поэтому вы можете сказать
#!/bin/sh
fd () {
echo Hello world
# No explicit exit here!
}
trap fd EXIT
trap 'exit 127' INT
Я помню, как я узнал об этом из сценариев других людей после того, как в течение нескольких лет боролся с различными обходными решениями вашей проблемы. После этого я заметил, что некоторые учебники объясняют эту технику. Но он не документирован четко, например. Bash справочная страница IMHO. (Или это было не тогда, когда мне это нужно. Возможно, некоторые вещи не меняются через 15 лет...: -)