Você não precisa de 3 Exit
como uma opção, pois dialog
já gera um botão "Cancelar". Você poderia fazer um loop para exibir a caixa de diálogo até que o usuário pressionasse o botão cancelar:
(Nota: parte da minha amostra de código é retirada de esta resposta )
#!/bin/bash
#we start the loop....
while [[ "$dialog_exit" -ne 1 ]]; do
#we force the redirection of the output to the file descriptor n°1 with the --fd-output 1 option
dialog_result=$(dialog --clear --menu "Task to perform" 10 30 3 1 "This task" 2 "That task" 3 "Yet another task" --fd-output 1);
#we store the exit code. If the user pressed cancel, exit code is 1. Else, it is 0.
dialog_exit=$?;
case "$dialog_result" in
1) echo "task 1";;
2) echo "task 2";;
3) echo "task 3";;
"") echo "action when cancel";;
esac
done