Я просто просматривал код этого сценария easyrsa здесь . Этот, вероятно, отличается от вашего, учитывая, что строка для ошибки - 341. На странице Github это строка 352, и она является частью функции с именем cleanup
. Похоже, что эта функция прикреплена только как trap
(строка 2744). Ловушки используются для перехвата таких сигналов, как sigint
(прерывание), которые обычно отправляются на терминал с помощью ctrl+c
(и могут отображать такие символы, как ^ C). Причина, по которой ошибка отображается только в вашем скрипте, заключается в том, что она, вероятно, вызывает испускание сигнала, который вы обычно не получали бы, если бы вы запускали его вручную через s sh.
Ошибка сама по себе не проблема.
Код из Github:
Строка 352:
(stty echo 2>/dev/null) || { (set -o echo 2>/dev/null) && set -o echo; }
Строка 2744:
trap "cleanup" EXIT
Похоже, эта строка просто пытается снова включить терминальный вывод ваших набранных символов (через stty echo
). Иногда программы где-то отключают вывод терминала, а затем снова включают его, когда программа завершает работу. Однако, если вы завершите программу на полпути (например, с помощью ctrl+c
), ваша программа завершится с отключенным выводом терминала. Это приведет к зависанию терминала. Он по-прежнему будет работать, но не будет отображать символы, которые вы вводите с клавиатуры. Смысл ловушки состоит в том, чтобы гарантировать, что вывод терминала будет повторно включен независимо от того, как программа завершается.
Подробнее ...
В строке 567 есть функция, отключающая эхо. Похоже, дело в том, чтобы не показывать пароль на экран. Если вы завершите программу во время чтения пароля, эхо останется отключенным на терминале. Вероятно, причина ошибки больше связана с тем, как вы запускаете скрипт. По какой-то причине это вызывает сбой stty echo
. Строка 352 предполагает, что сбой вызван тем, что stty echo
не является допустимой командой. Поэтому в случае неудачи (||
) он пробует другой метод (set -o echo
) включения эха. Если я попытаюсь запустить это на своем терминале, я также получу сообщение об ошибке (bash 4.2):
- bash: set: echo: invalid option name