Faça alguns campos requeridos no diálogo

1

O script abaixo cria uma caixa de diálogo. O usuário pode pressionar Enter a qualquer momento e depois o script continua. Eu preciso bloquear a tecla Enter para garantir que o usuário preencha todos os campos. Como posso fazer isso?

#!/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>&-

    
por Pol Hallen 26.07.2014 / 19:08

1 resposta

1

Eu não acho que o programa Dialog tenha uma opção para validar o conteúdo dos campos. Faça com que seu programa execute dialog em um loop, jogando o usuário de volta para a caixa de diálogo se eles inserirem valores incorretos, como campos vazios.

#!/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
    
por 27.07.2014 / 23:49