Mantenha a entrada do bash na linha superior da tela
12
Gostaria de manter a bashentrada do prompt de comando na parte superior da tela, para que as saídas dos comandos mais antigos sejam empurradas para baixo em vez de para cima.
Então, se você é catum arquivo, a ordem seria invertida?
caos
Não, mas eu gostaria que os blocos de saída fossem empurrados para baixo #
Tom Price
1
bashNão é possível fazer isso, porque bashnem sequer sabemos sobre as posições da tela: ele apenas grava em um arquivo de saída. Você precisaria de um emulador de terminal que saiba sobre basho prompt interativo para saber quando redefinir o cursor e quando rolar a janela.
chepner
Obrigado @chepner, estou revisando esse problema e seu comentário me fez olhar para fora do bash e começar a olhar para toda a pilha de displays. Eu quero permanecer nos consoles virtuais baseados em texto (ou seja, sem o X Windows), para evitar os emuladores de terminal por enquanto, mas, para as minhas sessões de GUI, certamente analisarei isso. No caso de alguém se depara com esta questão, o meu palpite é que tem a ver com tty e atualmente estou olhando aqui para inspiração ... linusakesson.net/programming/tty
Tom Price
Respostas:
7
Adicione estas linhas ao seu .bashrc:
prompt_on_top() {
tput cup 0 0
tput el
tput el1
}
pre_cmd() {
if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
return
fi
printf "\33[2J"
}
PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG
bashtem PROMPT_COMMAND , que mantém o comando será executado antes do bashprompt de exibição. Aqui, configuramos a função prompt_on_top, que usa tput para definir o cursor na parte superior da tela.
bashtambém tem uma maneira de executar um comando antes de executar qualquer comando, usando trap para manipular o sinal DEBUG. Aqui nós configurá-lo para a função pre_cmd, que irá limpar a tela de idade, e não fazer nada se fez conclusão ( COMP_LINE não está vazia) ou comando executado em BASH_PROMPT.
Há uma limitação nessa abordagem: se a saída do comando for muito longa demais para uma tela, a saída será substituída pela prompt_on_topação. Nesse caso, você precisa canalizar a saída para um pager para ler a saída inteira.
Obrigado pela sua resposta bem explicada, há muito para eu ler e aprender. Testei seu script e, atualmente, ele efetivamente limpa a saída antiga da tela entre os comandos. Gostaria de manter as saídas anteriores na tela, abaixo do prompt, e colocá-las para que novas saídas sejam inseridas entre o prompt e a saída antiga, empurrando a saída antiga para baixo na tela.
26615 Tom Price
Para aqueles que chegam aqui por meio de uma pesquisa na web, esse código github.com/swirepe/alwaysontop também "mantém seu prompt do bash na parte superior da tela", além de algumas outras funções. Porém, não responde à pergunta original: as saídas de comando mais antigas são excluídas como no código do cuonglm.
WillC
Uma outra desvantagem dessa solução é que você não tem comentários sobre o comando que foi executado pela última vez. Ou seja, cat filemostrará o fileconteúdo, mas você não receberá um feedback imediato do comando exato executado. Idealmente, o prompt seria seguido com uma versão não expandida + expandida do comando executado, seguida da saída std.
cat
um arquivo, a ordem seria invertida?bash
Não é possível fazer isso, porquebash
nem sequer sabemos sobre as posições da tela: ele apenas grava em um arquivo de saída. Você precisaria de um emulador de terminal que saiba sobrebash
o prompt interativo para saber quando redefinir o cursor e quando rolar a janela.Respostas:
Adicione estas linhas ao seu
.bashrc
:bash
tem PROMPT_COMMAND , que mantém o comando será executado antes dobash
prompt de exibição. Aqui, configuramos a funçãoprompt_on_top
, que usa tput para definir o cursor na parte superior da tela.bash
também tem uma maneira de executar um comando antes de executar qualquer comando, usando trap para manipular o sinalDEBUG
. Aqui nós configurá-lo para a funçãopre_cmd
, que irá limpar a tela de idade, e não fazer nada se fez conclusão ( COMP_LINE não está vazia) ou comando executado emBASH_PROMPT
.Há uma limitação nessa abordagem: se a saída do comando for muito longa demais para uma tela, a saída será substituída pela
prompt_on_top
ação. Nesse caso, você precisa canalizar a saída para um pager para ler a saída inteira.fonte
cat file
mostrará ofile
conteúdo, mas você não receberá um feedback imediato do comando exato executado. Idealmente, o prompt seria seguido com uma versão não expandida + expandida do comando executado, seguida da saída std.