다음 스크립트는 대화 상자를 만듭니다. 사용자는 Enter언제든지 키를 누를 수 있으며 스크립트는 계속됩니다. Enter사용자가 모든 필드를 채울 수 있도록 이 키를 차단해야 합니다 . 어떻게 해야 합니까?
#!/bin/bash
shell=""
groups=""
user=""
home=""
exec 3>&1
dialog --separate-widget $'\n' --ok-label "Ok" \
--backtitle "Linux User Managment" \
--title "new" \
--form "creating new " \
15 80 0 \
"field1: " 1 1 "$user" 1 25 40 0 \
"field2:" 2 1 "$shell" 2 25 40 0 \
"field3:" 3 1 "$groups" 3 25 40 0 \
"field4:" 4 1 "$home" 4 25 40 0 \
# aggiungi dimensione quota
2>&1 1>&3 | {
read -r user
read -r shell
read -r groups
read -r home
echo $user
echo $shell
echo $groups
echo $home
#continue script here
}
exec 3>&-
답변1
대화 상자 프로그램에 필드 내용의 유효성을 검사하는 옵션이 없다고 생각합니다. 프로그램이 dialog
루프에서 실행되도록 하고 사용자가 잘못된 값(예: 빈 필드)을 입력하면 대화 상자로 돌아갑니다.
#!/bin/bash
shell=
groups=
user=
home=
error_message=
IFS=$'\n'; set -f
while [[ -z $shell || -z $groups || -z $user || -z $home ]]; do
set $(dialog … --form="creating new $error_message" … --output-fd=3 3>&1 >/dev/tty)
shell=$1 groups=$1 user=$1 home=$1
error_message="(fields must not be empty)"
done
unset IFS; set +f