Я попытался скомпоновать скрипт, чтобы перечислить различные каталоги jws и разрешить пользователю выбирать разные клиентские каталоги, прежде чем продолжить редактирование jnlp-файлов в каталоге. У меня есть часть редактирования, у меня есть меню, работающее в основном; Я не могу понять, как выйти из цикла после того, как были сделаны выборы.bash интерактивное меню, выход на пустой вход
Я бы хотел, чтобы он вышел после того, как ENTER нажал без выбора номера и продолжит следующую часть скрипта.
function update_jnlp
{
while :
do
# JNLP update submenu
options=($(ls /tmp/test/ | grep "jws$"))
menu() {
clear
echo "Locally installed jnlps:"
for i in ${!options[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
done
[[ "$msg" ]] && echo "$msg"; :
}
prompt="Check an option (again to uncheck, ENTER when done): "
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
[[ "$num" != *[![:digit:]]* ]] &&
((num > 0 && num <= ${#options[@]})) ||
{ msg="Invalid option: $num"; continue; }
((num--)); msg="${options[num]} was ${choices[num]:+un}checked"
[[ "${choices[num]}" ]] && choices[num]="" || choices[num]="+"
done
printf "You selected"; msg=" nothing"
for i in ${!options[@]}; do
[[ "${choices[i]}" ]] && { printf " %s" "${options[i]}"; msg=""; }
done
done
for i in ${choices[@]}; do
printf "%s\n" ${choices[@]};
echo "fun"
done
echo "@msg"
# here is the script to edit the files now contained as ${choices[@]}
}
Я признаю, что я нахожусь в цикле меню, и что мне нужно проверить, что входные данные от команды чтения = «» или что приглашение ввод $ имеет нулевое значение, и я предполагаю, что я нарушу оттуда
«* Я признаю, что я нахожусь в цикле меню и что мне нужно проверить этот ввод с помощью команды чтения =" "или что ввод $ prompt является нулевым, и я предполагаю, что я отрываюсь отсюда *" Вы пробовали это ? – ShellFish
У меня есть, но я думаю, что просто не могу получить порядок работы справа или синтаксис. –
* $ prompt input is null * Какое значение должно быть '$ prompt' должно быть« null »? Попробуйте распечатать его и посмотреть, что он содержит, если вы имеете в виду, когда он не установлен, попробуйте '[" $ prompt "] || break'. 'Read' хранится в' $ num'. Чтобы убедиться, что это пустая строка, используйте точно такой же '[" $ num "] || break'. – ShellFish