выход из стека функций без выхода из оболочки

Я писал сценарий и столкнулся со странной проблемой. Если бы я создал сценарий, содержащий набор функций, которые могут вызывать функцию ошибки, которая выводит строку и затем завершается, он выйдет из моей оболочки. Я знаю, почему он это делает. Это связано с тем, что вызов функции находится в том же пространстве процесса, что и вызывающая сторона (по крайней мере, в bash), поэтому выход внутри функции завершает текущий процесс с предоставленным кодом выхода. Пример:

error()
{
  echo $1
  exit 1
}

fn()
{
  if [ $# == 0 ]; then
    error "Insufficient parameters."
  fi
  # do stuff
}

$ fn
Insufficient parameters.
[shell terminates]

Итак, мой вопрос: могу ли я выйти из всех функций в стеке функций, не закрывая текущую оболочку и не порождая новую подоболочку?

Спасибо

34
задан Adrian 21 June 2012 в 15:06
поделиться