No bash, isso exibirá o prompt / comando atual no topo e sua saída abaixo, mas sem nenhum comando de rolagem ou anterior:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'
Esta função irá colocar os comandos anteriores abaixo, mas você tem que canalizar cada um e todos os comandos para ele individualmente. Infelizmente, exec > >(f)
não pode ajudar com isso, pois redireciona todo o bash, não comandos individuais. Aqui está a função:
f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }
Em seguida, execute todos os comandos como:
command args |f
Ele salva a saída, cria um número de linhas em branco igual a length + 1 e, em seguida, coloca a saída de volta. Você pode marcar uma linha no final que exibirá um prompt falso ou uma regra horizontal, se desejar. Por exemplo,
printf '%*s' $COLUMNS | tr ' ' _;
Como uma porcaria, mas alternativa automática para essa coisa toda da função, podemos adicionar um comando ao final de nosso $ PROMPT_COMMAND anterior que limpa 11 linhas um tanto arbitrárias:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'
Você também pode usar tput -S
para evitar várias chamadas binárias.
Eu tenho o $PROMPT_COMMAND
do link .