Podemos usar o comando stty -echo
com um script shell bash para evitar que caracteres sejam ecoados no console, por exemplo, para entrada de senha.
Existe uma maneira de imprimir um *
para cada caractere de entrada e excluí-los ao pressionar backspace?
Bem, aqui está no bash:
Este código solicitará uma senha ao usuário, exibirá * para cada caractere digitado e tratará os retrocessos corretamente. A senha inserida é armazenada na variável password.
Algumas linguagens de programação já possuem essa funcionalidade integrada.
se você estiver usando
bash
, você pode simplesmente usar a-s
opção whichread
suprime a entrada:Você ainda precisa hackear a exibição dos asteriscos, mas pode fazer isso usando a abordagem descrita por Dennis Williamson nesta resposta do SO :
No entanto, isso não suporta a exclusão de caracteres, pois o retrocesso também é apenas repetido como mais um
*
em vez de exclusão. Portanto, a resposta de Max Haase , que lida com isso, é melhor.Talvez seja um pouco exagerado, mas se você tiver
pinentry
os programas do GPG instalados, poderá usá-los para apresentar uma interface agradável ao usuário para solicitações de senha, incluindo asteriscos para mascarar caracteres (ativados por padrão), medidores de força da senha, confirmação de senha, etc. No entanto, ele usa um sistema de comando-resposta para comunicação através de um canal, em vez de ser simplesmente invocável usando opções diretamente. Então você envia comandos pelapinentry
entrada de para personalizar o prompt, realmente solicita a senha, etc., e então analisa a saída (que incluirá mensagens de status e outros) para obter a senha.Algo como:
E use assim:
Isso abrirá uma caixa de diálogo em tela inteira no terminal:
(É uma caixa perfeita no meu terminal, mas pode não aparecer na página da web.)
Você também pode usar
pinentry-gnome
,pinentry-qt
,pinentry-mac
, etc. para fazer prompts da GUI se o ambiente apropriado estiver presente.