Como exibir uma string à direita do prompt de inserção do usuário

0

Eu tenho um script simples

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
done

cuja interação com o usuário pode resultar no seguinte:

a
a
b
a b
c
a b c
d
a b c d

Como posso ter a string exibida à direita na mesma linha que o usuário para ter a saída

a                                 a
b                                 a b
c                                 a b c
d                                 a b c d
    
por user123456 13.10.2016 / 02:03

1 resposta

1

Assumindo o caso mais simples (uma palavra curta, nenhuma quebra de linha, nenhuma preocupação em chegar ao final da tela com a rolagem), você poderia fazer isso

#!/bin/bash
SENTENCE=""
tput sc
while read word
do
    SENTENCE="$SENTENCE $word"
    tput rc
    tput hpa 20
    printf '%s\n' "$SENTENCE"
    tput sc
done

Isso usa dois recursos de terminal que estão na maioria das descrições de terminal que você usaria:

  • salva / restaura a posição do cursor (os parâmetros sc e rc ) e
  • posição horizontal (o parâmetro hpa ).

Você pode codificar as seqüências de escape correspondentes, às custas da legibilidade ...

A propósito, alguns podem sugerir o uso do escape de seta para cima, mas isso tem o mesmo problema de rolagem no final da tela, como também \e[F ( CPL , que não está na descrição do seu terminal ).

Para mover horizontalmente, você pode usar o cursor à direita com um parâmetro, por exemplo,

tput cuf 20

que seria \e[20C .

No final da pergunta, há comentários sobre \e[1a , mas as sequências de escape ANSI são dependentes de maiúsculas e minúsculas, o que não é o mesmo que \e[1A (que move o cursor para cima por uma linha). Isso pode ser o que você tinha em mente:

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
    tput cuu1
    tput hpa 20
    printf '%s\n' "$SENTENCE"
done

que é mais fácil de ler do que

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
    echo -en '\e[A'
    echo -en '\e[20C'
    echo "$SENTENCE"
done
    
por 13.10.2016 / 02:46