O "redirecionamento ambíguo" refere-se ao fragmento 2>$data . Isso indica que o valor da variável data não se expande para exatamente uma palavra.
Dada a maneira como você o define, é mais provável que o valor de data esteja vazio porque o comando tempfile falhou. Você está, por algum motivo, ocultando qualquer mensagem de erro emitida por tempfile . Remova o redirecionamento:
data=$(tempfile)
O utilitário tempfile é um utilitário Debian, que você não encontrará fora do Debian e derivados como Ubuntu e Linux Mint. É provável que você esteja executando esse script em um sistema que não tenha esse utilitário. Você pode usar o utilitário similar mktemp , que está amplamente disponível.
data=$(mktemp)
Além disso, como você está armazenando dados confidenciais, é necessário garantir que o arquivo temporário não seja legível.
data=$(umask 077; mktemp)
Dito isto, criar um arquivo temporário é mais complexo do que o necessário. Em vez disso, instrua dialog para imprimir os dados em sua saída padrão e use uma substituição de comando.
#!/bin/bash
password=$(dialog --title "Password" \
--clear \
--passwordbox "Enter your password" 10 30 \
--stdout)
ret=$?
…