При запуске этого кода будет выведено текстовое меню. Что вы делаете с ./menu.sh | bash
, так это то, что вы загружаете меню в bash
для выполнения. Другими словами, вы говорите bash
: «Пожалуйста, запустите это меню». bash
не знает, что означает какой-либо текст в меню, поэтому выдает ошибки.
Однако вы говорите, что не будете использовать этот сценарий так. Вы собираетесь получить (сценарий, а не его вывод )и выполнить его:
curl -o- 'ftp://.../menu.sh' | bash
Это не приведет к выполнению сценария в левой части конвейера, в отличие от вашего ./menu.sh | bash
. Так что то, что вы предлагаете, вероятно, сработает.
Также обратите внимание, что гораздо проще сделать многострочный -вывод с документом здесь -:
cat <<END_MENU
===== MAIN - MENU =====
1. Run old sanity script
2. Asterisk
3. Audio
4. CoCo
5. Database
6. Mobile
7. SSH
8. Touch
9. VDS
10. Wireshark
-----------------------
q. Quit
r. Reload
=======================
END_MENU
Также исследуйте утверждение select
в bash
. Он отображает меню для вас и упрощает ввод данных пользователем (, если вам не требуется специальное форматирование меню и опций, очевидно ).
Вы также можете использовать несколько шаблонов в операторах case
:
q|Q) echo 'Bye!'
exit ;;
или
[qQ]) echo 'Bye!'
exit ;;
(exit
из-за запроса пользователя, вероятно, не должен возвращать не -нулевой код выхода, кстати)
Работает после обновления ядра до версии 5.8
Спасибо A.B в комментарии за ответ.