como fazer bash para não quebrar a saída?


33

Sempre que algum comando gera linhas longas como saída (por exemplo, quando ls -luma pasta contém arquivos com nomes longos), as linhas longas são agrupadas na próxima linha, prejudicando a estrutura da coluna.

Existe alguma maneira de evitar isso? Algo parecido com a opção 'nowrap' vim?


atualizar

Percebi um problema com a resposta aceita:
se eu criar um apelido como: alias ll="tput rmam; ls -l; tput smam"
e depois tentar grep sua saída: ll | grep foo
ele ainda imprimirá todos os arquivos, como sem o grep.

A solução que encontrei é colocar colchetes em todo o alias:
alias ll="(tput rmam; ls -l; tput smam)"



Respostas:


27

Observe que isso não tem nada a ver com o bash (depois que você inicia o comando, o bash espera apenas que ele termine) e tudo a ver com o terminal.

A maioria dos emuladores de terminal envolve a margem direita por padrão. Mas isso pode ser desativado usando a sequência de controle apropriada , se o emulador de terminal suportar; as linhas longas são simplesmente truncadas:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

sim, era isso que eu estava procurando, obrigado Gilles!
Mihai Rotaru

12
Mais portàvel:tput rmam; ls -l longname; tput smam
Pausado até novo aviso.

melhor ainda; mas de onde veio mamãe? Procurei nos manuais tput e termcap, mas não encontrei nada sobre eles?
Mihai Rotaru

2
@ Mihai: tente a documentação terminfo ( man 5 terminfono Linux).
Gilles 'SO- stop be evil'

de fato, está lá #
005 Mihai Rotaru 16/09


5

Você poderia usar uma função assim:

nowrap() 
{ 
   cut -c-$(tput cols); 
}

lembre-se de que você precisará prefixar comandos com nowrapou qualquer que seja o nome da função.


funciona, mas eu perco o código de cores; alguma maneira de preservar isso também?
Mihai Rotaru

3

Você pode substituir uma função para que ela seja executada automaticamente tput rmamantes do grep e tput smamdepois:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

Deixe isso no seu .bash_profilee sempre que você executar grep, ele será recebido sem quebra de linha.

Isso foi muito editado, desculpas aos comentaristas.


The sleep 20is amazing :-)
Ciro Santilli # 9/18

2

canalize-o para menos comando com a opção -S:

ls -l | less -S

Em seguida, você pode usar as setas para cima / baixo / esquerda / direita para rolar e digitar q para sair.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.