¿Cómo hacer bash para no envolver la salida?

33

Cada vez que algún comando genera líneas largas como salida (por ejemplo, cuando ls -luna carpeta que contiene archivos con nombres largos), las líneas largas se ajustan a la siguiente línea, lo que desordena la estructura de la columna.

¿Hay alguna forma de evitar esto? ¿Algo parecido a la opción vim 'nowrap'?


actualizar

Noté un problema con la respuesta aceptada:
si hago un alias como: alias ll="tput rmam; ls -l; tput smam"
y luego trato de grep su salida: ll | grep foo
todavía imprimirá todos los archivos, como sin el grep.

La solución que encontré es poner corchetes alrededor del alias completo:
alias ll="(tput rmam; ls -l; tput smam)"

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

Respuestas:

27

Tenga en cuenta que esto no tiene nada que ver con bash (una vez que ha lanzado el comando, bash solo espera a que termine) y todo lo que tiene que ver con el terminal.

La mayoría de los emuladores de terminal se ajustan al margen derecho de forma predeterminada. Pero esto puede desactivarse utilizando la secuencia de control apropiada , si el emulador de terminal lo admite; entonces las líneas largas simplemente se truncan:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'
Gilles 'SO- deja de ser malvado'
fuente
sí, esto es lo que estaba buscando, ¡gracias Gilles!
Mihai Rotaru
12
Más portátil:tput rmam; ls -l longname; tput smam
pausa hasta nuevo aviso.
aun mejor; pero de donde vino [rs] mam? Busqué en los manuales de tput y termcap pero no pude encontrar nada sobre ellos.
Mihai Rotaru
2
@Mihai: pruebe la documentación de terminfo ( man 5 terminfoen Linux).
Gilles 'SO- deja de ser malvado'
de hecho, está ahí
Mihai Rotaru
17

Si desea poder desplazarse horizontalmente en lugar de truncar las líneas, use less -S.

Pausado hasta nuevo aviso.
fuente
5

Podrías usar una función como esta:

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

tenga en cuenta que tendrá que prefijar comandos con nowrapo lo que sea que nombre la función.

John T
fuente
funciona, pero pierdo la codificación de color; alguna forma de preservar eso también?
Mihai Rotaru
3

Puede anular una función para que se ejecute automáticamente tput rmamantes de grep y tput smamdespués:

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

Deja eso en tu .bash_profiley cada vez que corras grep, grep sin ajuste de línea.

Esto ha sido muy editado, disculpas a los comentaristas.

ognockocaten
fuente
The sleep 20is amazing :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

canalícelo a menos comando con el interruptor -S:

ls -l | less -S

Luego puede usar las flechas hacia arriba / abajo / izquierda / derecha para desplazarse y escribir q para salir.

qartal
fuente
1

Prueba esto

function nowrap { export COLS=`tput cols` ; cut -c-$COLS ; unset COLS ; echo -ne "\e[0m" ; }
drigoSkalWalker
fuente
perdón por la pala de oro
drigoSkalWalker