Bash read -e exclui entrada printf no backspace

1

Eu uso printf "input: "; read -e . Eu digito algo, então eu pressiono Backspace . Ao atingir o último caractere, isso exclui a parte input: junto com ela. Backspace não se comporta mal se eu não tivesse digitado nada antes ou se eu usasse o simples read (sem Readline).

    
por glarry 01.02.2018 / 10:43

1 resposta

5

read in bash é um comando interno. read -e usa a edição de bash em tela cheia por meio da biblioteca readline (isto é, entende como voltar para a linha anterior, mover o cursor para a esquerda e para a direita no texto inserido etc.). Pode usar códigos de endereçamento de cursor para otimizar a saída para a tela.

No entanto, espera-se que o cursor esteja no início da linha quando começa e, às vezes, é mais rápido limpar toda a linha ao remover a entrada do que remover os caracteres individuais. Isso é o que está atrapalhando o seu prompt, que move o cursor para a direita sem que o bash saiba disso.

A mesma coisa pode acontecer ao usar escapes de terminal no seu prompt (por exemplo, para definir uma cor ou para definir o título do terminal). Para este propósito, bash tem saídas especiais para indicar quais bytes não movem o cursor.

Você deve usar read -p 'input: ' -e , a opção -p para solicitação é feita especialmente para isso.

    
por 01.02.2018 / 16:50