Como personalizar a saída dos comandos do terminal?

3

Estou tentando fazer algumas linhas vazias logo antes da primeira linha de execução de comandos no terminal e também outra após a última linha (para sempre executar qualquer comando), porque quando edito o PS1 , só posso adicionar linha vazia antes da primeira linha, mas desapareceu quando eu executei alguns comandos se ele tiver resultado longo, isto é: executando update , o que causa ignorar a linha vazia adicionada.

algo assim (até executar a atualização):

Quando eu maximizo a janela do Terminal eu posso ter esta última linha vazia, então eu quero isso também na janela normal. A linha vazia antes da primeira linha não é importante, mas ter o último vazio é muito importante para mim. Como posso lidar com o resultado da execução de comandos? se eu conseguir isso, então eu posso ter a última linha vazia. por favor!

    
por devWeek 22.09.2014 / 13:29

3 respostas

1

Eu preservo a resposta anterior para mim e adiciono mais uma, dependendo da nossa discussão.

Esta não é uma solução perfeita, mas acho que podemos melhorar isso juntos:

#!/bin/bash

new_line(){
    echo -e "";
}

n=0  # line counter
H=$(stty size | cut -d" " -f1)  # this is height of current terminal
# uncomment next line if you want to add empty line after (height - 1) lines
# H=$((H - 1))
new_line
eval $@ |
while IFS= read -r line
do
    echo $line;
    n=$(($n+1));
    if !((n % H)); then # every H lines it is true
        new_line
    fi;
done
new_line

Crie este script com qualquer nome, no meu caso ele é test.sh , torne-o executável.

Agora, execute este script e o comando path que você deseja como argumentos

$ ./test.sh sudo apt-get update

Atualizar

Versão final do script que funcionou para o @KasiyA, mas não funciona para mim:

#!/bin/bash 
eval $@ | 
  while IFS= read -r line
  do 
    echo $line
  done
    
por c0rp 24.09.2014 / 21:16
0

Se você quiser exatamente uma linha em branco, tente isto:

Abra o terminal e crie essas duas funções e execute trap :

$ preexec () { echo -e ""; }
$ preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
$ trap 'preexec_invoke_exec' DEBUG

Agora tente executar qualquer comando e ver os resultados

Certifique-se de que help trap diz:

% bl0ck_qu0te%

Se funcionar como deseja, adicione essas funções e trap ao seu .bashrc

Além disso, você pode querer alterar a função preexec para este preexec () { echo "-------------------------------"; } , porque parece mais distinto.

Para mais informações, leia isto:

  1. Envolvendo os comandos do bash

  2. Bash hook antes de executar o comando

por c0rp 24.09.2014 / 20:19
0

Melhor solução: Encontrei um comando muito interessante. From man stty: stty - altere e imprima as configurações da linha de terminal.

Em tty1 eu corri isto: sudo stty rows 20 . Agora minha tela tty é limitada a 20 linhas, o que permite 20 linhas na tela. Ele funciona com o sudo apt-get install libreoffice -s e qualquer outro comando.

Agora, parece que não funciona com o gnome-terminal ou o xterm, mas agora estou trabalhando na solução. Provavelmente, tem que mudar alguma coisa no arquivo .bashrc.

Uma solução minimalista para o problema seria usar menos ou mais ou pg. Por exemplo , se eu simular instalar o libreoffice,

sudo apt-get install libreoffice -s | less

Dessa forma, você substituiu a última linha por: e ainda poderá executar o comando. O único pacote de sorteio é que você deve pressionar enter, para pular para a próxima página no caso de pg ou da próxima linha no caso de menos / mais.

Outra solução é usar o comando head ou tail . Isso funcionará bem se você não se importar com toda a saída, mas apenas com a primeira e a parte final dela. Assim como o nome sugere, eles permitem que você veja a parte superior (cabeça) da saída ou a extremidade (final) da saída. Por exemplo,

 sudo apt-get install libreoffice -s | head -n20;

Que lhe dará primeiro 20 linhas da saída (o padrão é 10, pelo que descobri). Para obter última 20 linhas, a mesma coisa com a cauda:

sudo apt-get instala libreoffice -s | cauda -n20;

O problema com essas soluções, no entanto, é que se você estiver executando algum comando interativo com saída longa, isso provavelmente impedirá que você interaja com esse comando, portanto, lembre-se disso.

    
por Sergiy Kolodyazhnyy 25.09.2014 / 09:29