comment faire bash pour ne pas envelopper la sortie?


33

Chaque fois qu'une commande génère de longues lignes en sortie (par exemple, lorsqu'un ls -ldossier contient des fichiers avec des noms longs), les longues lignes sont encapsulées à la ligne suivante, gâchant ainsi la structure des colonnes.

Y a-t-il un moyen d'éviter cela? Quelque chose qui ressemble à l'option vim «nowrap»?


mise à jour

J'ai remarqué un problème avec la réponse acceptée:
si je crée un alias comme: alias ll="tput rmam; ls -l; tput smam"
puis j'essaye de grep sa sortie: ll | grep foo
il imprimera toujours tous les fichiers, comme sans grep.

La solution que j'ai trouvée est de mettre des crochets autour de l'alias entier:
alias ll="(tput rmam; ls -l; tput smam)"



Réponses:


27

Notez que cela n'a rien à voir avec bash (une fois que vous avez lancé la commande, bash attend juste qu'elle se termine) et tout à voir avec le terminal.

La plupart des émulateurs de terminaux s'enroulent dans la marge de droite par défaut. Mais cela peut être désactivé en utilisant la séquence de contrôle appropriée , si l'émulateur de terminal la prend en charge; alors les longues lignes sont simplement tronquées:

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

oui, c'est ce que je cherchais, merci Gilles!
Mihai Rotaru

12
Plus facilement:tput rmam; ls -l longname; tput smam
pause jusqu'à nouvel ordre.

encore mieux; mais d'où vient [rs] mam? J'ai cherché dans les manuels tput et termcap mais je n'ai rien trouvé à leur sujet?
Mihai Rotaru

2
@Mihai: essayez la documentation terminfo ( man 5 terminfosous Linux).
Gilles 'SO- arrête d'être méchant'

en effet, il est là
Mihai Rotaru


5

Vous pouvez utiliser une fonction comme celle-ci:

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

gardez à l'esprit que vous devrez préfixer les commandes avec nowrapou quel que soit le nom de la fonction.


cela fonctionne, mais je perds le codage couleur; un moyen de préserver cela aussi?
Mihai Rotaru

3

Vous pouvez remplacer une fonction pour qu'elle s'exécute automatiquement tput rmamavant votre grep et tput smamaprès:

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

Déposez cela dans votre .bash_profileet à chaque fois que vous exécutez grep, il va grep sans retour à la ligne.

Cela a été lourdement édité, excuses aux commentateurs.



2

redirigez-le vers la commande less avec le commutateur -S:

ls -l | less -S

Ensuite, vous pouvez utiliser les flèches haut / bas / gauche / droite pour faire défiler et taper q pour quitter.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.