Existe uma maneira de fazer com que o conteúdo exibido desapareça logo após a entrada do usuário?
Por exemplo, pegue este arquivo abaixo
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Se você executar isso, a saída será
how are you ? yHave fun
Estou procurando por algo que me permita how are you ?
desaparecer assim que o usuário pressionar uma tecla
E depois de desaparecer, imprima Have fun
Então, eu quero que a última saída do programa acima seja apenas
Have fun
Nota: Além disso, qualquer coisa acima desse script impresso na tela do shell não deve ser apagada.
estou usando bash
clear
entreecho
s não é uma opção?clear
limpará a saída que já está impressa acima na tela, se houver alguma. @sebasthAre you fine
vem? Isso não deveria serHow are you
?Respostas:
Você pode usar:
(ou
printf '\r'
) para mover o cursor para o início da linha. Seguido por:para excluir tudo até o final da linha. (
tcsh
ezsh
também possui oechotc
built-in que você pode usar com otermcap
equivalente a issoterminfo
el
:echotc ce
(tambémechoti el
emzsh
))fonte
Use um retorno de carro (
\r
). Esse caractere especial (restante dos dias das máquinas de escrever mecânicas) moverá o cursor de volta ao início da linha. Então, você precisa de tantos espaços quanto a mensagem que deseja excluir (isso substituirá a mensagem) e, em seguida, um segundo retorno de carro para voltar ao início antes de imprimir a próxima mensagem. Algo assim:A execução do script acima é impressa:
fonte
\r
você pode colocar todos os espaços entre\rHave fun
e\n
.Existem várias maneiras de fazer isso, variando de prova de idiota a elegante.
O método mais infalível (embora seja mais trabalhoso) é o backspace space backspace repetido quantas vezes forem necessárias. Isso funciona em tudo, exceto nos teletipos (remover a tinta do papel é um desafio).
Em seguida, na escala, estão os espaços de retorno de carro. Isso não funciona com emuladores de terminal que inserem um avanço de linha antes ou depois de cada retorno de carro (esta é uma opção minicom e outras podem ser configuradas para ter).
Depois, há os truques específicos do terminal. Mencionarei apenas os códigos de capacidade do termcap, pois os bancos de dados termcap e terminfo podem mostrar o uso. (Aqui está uma lista.)
Simples para uma única linha é mover para a coluna (ch) seguida de limpar para o final da linha (ce).
Para casos mais complicados, incluindo respostas de várias linhas, é possível salvar a posição absoluta (sc), prompt, resposta de leitura, restaurar a posição do cursor (rc), limpar até o final da tela (cd).
Na maioria dos casos, você pode codificar os valores do vt100 para as duas últimas respostas, pois a maioria dos emuladores de terminal é compatível com ele. É claro que nem todos os terminais suportam essas opções, mas aqueles que não são raros e obsoletos.
fonte