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



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'

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


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.


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.



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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.