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)"

Mihai Rotaru
fonte
relacionada unix.stackexchange.com/questions/20493/...
Ciro Santilli新疆改造中心法轮功六四事件
relacionada superuser.com/q/600677/105108
ks1322

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'
Gilles 'SO- parar de ser mau'
fonte
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
17

Se você quiser fazer rolagem horizontal em vez de truncar as linhas, use less -S.

Pausado até novo aviso.
fonte
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.

John T
fonte
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.

ognockocaten
fonte
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.

qartal
fonte
1

Tente isto

function nowrap { export COLS=`tput cols` ; cut -c-$COLS ; unset COLS ; echo -ne "\e[0m" ; }
drigoSkalWalker
fonte
desculpe pela pá de ouro
drigoSkalWalker