Como exibir o ícone da chave personalizada no Terminal.app?

3

Ao enviar uma solicitação POST para um servidor que requer autenticação de usuário e senha, o Terminal.app exibe um ícone de chave intermitente que eu acredite não é Unicode.

Ao pedir ao usuário que insira informações sensatas em meu próprio script, eu poderia verificar se TERM_PROGRAM é um Apple_Terminal , mas não sei como exibir o ícone piscando.

    
por Jorge Bucaran 16.12.2015 / 10:23

1 resposta

8

A imagem "chave" não é um glifo de caracteres, é uma forma de cursor personalizada que o Terminal desenha.

O terminal exibe essa forma de cursor especial sempre que parecer que o usuário está sendo solicitado a digitar uma senha ou dados confidenciais semelhantes. Além de exibir este cursor, ele restringe o teclado a métodos de entrada romanos para evitar que um método de entrada exiba inadvertidamente informações confidenciais como texto embutido ou em outra janela. Isso se comporta como o campo de texto padrão da senha do OS X.

O terminal entra nesse modo quando vê que o dispositivo TTY está configurado para o modo canônico (também conhecido como "cozido") e o eco de caractere está desativado. Nesta configuração, a entrada do usuário não é ecoada e somente o buffer de entrada do dispositivo TTY verá os caracteres até que você digite Return para enviá-lo ao programa aplicativo. Isso garante que nem o dispositivo TTY nem o programa do aplicativo consigam ecoar a entrada do usuário enquanto você digita o texto, portanto, essa configuração geralmente é usada apenas para ler informações confidenciais.

Você pode vê-lo em ação no Bash, executando

stty -echo && echo Tell me your secrets: && cat; stty echo

stty -echo desativa o eco do caracter TTY, e quando o Bash executa um comando, ele habilita o modo canônico, então o seguinte comando cat será executado no modo "senha". cat ecoará cada linha de entrada até você digitar Control - D . stty echo volta a ligar depois de cat sair.

Observe que um script de shell pode simplesmente usar read -s para ler com o TTY nesse modo, por exemplo,

while read -sp 'Tell me your secrets: '; do echo; echo $REPLY | vis; done
    
por 16.12.2015 / 12:29