Eu sei que poderia excluir os três últimos caracteres com:
echo -ne '\b\b\b'
Mas como posso excluir uma linha completa? Quero dizer, não quero usar:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
... etc ... para excluir uma linha longa.
command-line
echo
LanceBaynes
fonte
fonte
echo -ne "\033[2K" ; printf "\r"
agora a linha é nova como se nunca tivesse sido escrita antes.echo -ne "\e[2K\r"
. Mas as seqüências de escape ANSI FTW, no entanto.Respostas:
Você pode usar
\b
ou\r
para mover o cursor para trás e substituir o caractere impresso por um novo. Observe que\b
nem\r
exclui nem os caracteres impressos. Apenas move o cursor para trás.\b
move o cursor para trás um caractere e\r
move o cursor para o início da linha.Exemplo: ambos
e
irá imprimir:
Se você deseja excluir os caracteres, use a seguinte solução alternativa:
resultado:
Trecho de
man echo
:fonte
echo -e 'fooooooooo\rbar
ecoa barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
também ecoabaroo
.printf
.Você está procurando escapes terminais . Em particular, para limpar da posição do cursor até o início da linha:
Ou tudo na linha, independentemente da posição do cursor:
E você também pode fazer todos os tipos de truques com fugas de terminal.
fonte
-e
como oecho
argumento não é compatível com POSIX + eu não gosto das seqüências de escape. Ou prefereprintf
output
.-e
parâmetro paraecho
não é compatível com POSIX, mas ainda assim ...Se você deseja limpar a linha, sugiro que você use uma combinação do retorno de carro que as pessoas estão mencionando e terminfo.
Isso escreverá
xyzzyxyzzy
, retornará ao início da linha e enviará a sequência "limpar até o final da linha" para o terminal e, em seguida, escreveráfoobar
. O-n
make echo não adiciona uma nova linha após ofoobar
.fonte
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
à portabilidade e evitar o conteúdo de$ceol
passar pela\x
expansão.Você solicitou explicitamente
echo
, mas esta solicitação o define. Aqui está uma abordagem que usa oprintf
comando embutido do bash com expansão de chaves:fonte
Aqui está um exemplo usando as opções de nova linha
-n
e retorno de carro da echo\r
.fonte
Em vez de
echo -en "\r"
você também pode achar oprintf "\r"
comando útil. Dessa forma, você pode formatar a sequência. por exemplo:Eu costumo fazer isso também ao operar com análise lenta de arquivos para exibir o nome do arquivo atualmente em andamento sem criar uma lista
fonte
Como pergunta é excluir a linha completa
Eu usei o comando abaixo com a combinação de
echo
esed
para excluir a linhaApós a execução do comando, o resultado ficará vazio. Desde que a linha seja substituída por nenhuma
comando
fonte
Aqui está um exemplo de temporizador que eu uso:
fonte