BASH: Newline ou HR após a saída do comando longo

2

Existe alguma maneira de configurar o Bash para imprimir uma nova linha ou linha horizontal após os comandos que forneceram mais de N linhas de saída? Por exemplo, depois de um simples cd eu não preciso de uma nova linha ou linha horizontal, mas depois de um longo cat uma indicação visual do final da saída de cada comando seria ótima quando eu estivesse comparando a saída de vários comandos.

    
por dotancohen 04.01.2012 / 07:05

2 respostas

2

Na verdade, você pode usar um script de wrapper como o abaixo:

#!/bin/bash

CMD="$*"
N=10
IFS=:

i=0;
eval $CMD | while read line; do
    echo "$line"
    i=$((i+1))
    if [ $((i % $N)) -eq 0 ]; then
        echo '================================================================';
    fi
done

Salve em seu homedir, vamos dizer como um ~ / wrapper.sh. Faça alias para isso no seu arquivo .bashrc:

alias wrap="~/wrapper.sh "

Agora você pode invocar o comando de sua escolha com o prefixo 'wrap':

wrap cat veryLongFile

O stdout do seu comando será pós-processado pelo wrapper.sh (estou adicionando linha horizontal após cada linha de 1o)

    
por 04.01.2012 / 21:56
3

Isso não pode ser feito no bash. A saída do programa para o terminal não passa pelo shell (bash), então não há como o bash determinar quantas linhas foram impressas.

Pessoalmente, basta pressionar manualmente uma ou duas vezes para o caso de precisar de separação visual. Se você gostaria de ter uma nova linha no comando every , a melhor maneira é export PS1='\n'"$PS1"

    
por 04.01.2012 / 11:51