Обработка действий DCL ON ERROR после первой ошибки?

Команда OpenVMS DCL HELP ON EXAMPLE дисплеи:

НА

Примеры

   1.$ ON SEVERE_ERROR THEN CONTINUE

     A command procedure that contains this statement continues
     to execute normally when a warning or error occurs during
     execution. When a severe error occurs, the ON statement signals
     the procedure to execute the next statement anyway. Once
     the statement has been executed as a result of the severe
     error condition, the default action (ON ERROR THEN EXIT) is
     reinstated.

Согласно справке, если ни [-]x.for ни [-]y.for существует, тогда две последние строки не будут выполнены:

$ on error then $ continue
$ rename [-]x.for []
$ rename [-]y.for []
$ type *.for

Есть ли способ установить ON ERROR обработка как в первой строке без размещения ON ERROR оператор между каждой строкой скрипта?

1 ответ

Если ON ERROR срабатывает, вы должны восстановить его. Похоже, вы не знаете, существует ли какой-либо из файлов. Таким образом, ON ERROR необходимо восстановить после первой неудачной команды.

Вы можете сделать это в подпрограмме, например:

$ on error then $ gosub on_error
$ rename [-]x.for []
$ rename [-]y.for []
$ on error then $ exit
$ type *.for
$ exit
$
$ on_error:
$ on error then $ gosub on_error
$ return

Кроме того, вы можете справиться с этим по-другому, отключив проверку ошибок (SET NOON):

$ set noon
$ rename [-]x.for []
$ rename [-]y.for []
$ set on
$ type *.for

или установление обработки ошибок только для серьезных ошибок (ON SEVERE_ERROR):

$ on severe_error then $ exit
$ rename [-]x.for []
$ rename [-]y.for []
$ on error then $ exit
$ type *.for
Другие вопросы по тегам