Question comment faire bash pour ne pas envelopper la sortie?


A chaque fois qu'une commande génère des lignes longues en sortie (par exemple, quand ls -l un dossier qui contient des fichiers avec des noms longs), les longues lignes sont enveloppées à la ligne suivante, ce qui perturbe la structure de la colonne.

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


mettre à jour

J'ai remarqué un problème avec la réponse acceptée:
si je fais un alias comme: alias ll="tput rmam; ls -l; tput smam"
et puis essayez de grep c'est la sortie: ll | grep foo
il imprimera toujours tout fichiers, comme sans grep.

La solution que j'ai trouvée consiste à mettre des crochets sur tout l'alias:
alias ll="(tput rmam; ls -l; tput smam)" 


24
2017-09-15 11:18


origine


en relation unix.stackexchange.com/questions/20493/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Réponses:


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

La plupart des émulateurs de terminaux sont placés par défaut à la marge droite. Mais cela peut être désactivé en utilisant le bon séquence de contrôle, si l'émulateur de terminal le 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'

22
2017-09-15 20:34



oui, c'est ce que je cherchais, merci Gilles! - Mihai Rotaru
Plus portable: tput rmam; ls -l longname; tput smam - Dennis Williamson
encore mieux; mais d'où [rs] mam venait-il? J'ai cherché des manuels de tput et termcap mais je n'ai rien trouvé à leur sujet? - Mihai Rotaru
@Mihai: essayez la documentation terminfo (man 5 terminfo sous Linux). - Gilles
en effet, il est là - Mihai Rotaru


Si vous souhaitez pouvoir effectuer un défilement horizontal au lieu de tronquer les lignes, utilisez less -S.


10
2017-09-15 14:30





Vous pouvez utiliser une fonction comme celle-ci:

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

Gardez à l'esprit que vous devrez préfixer les commandes avec nowrap ou peu importe comment vous nommez la fonction.


2
2017-09-15 11:24



ça marche, mais je perds le code couleur; n'importe quel moyen de préserver cela aussi? - Mihai Rotaru


Ici se trouve le .bash_profile alias j'utilise pour désactiver automatiquement le retour à la ligne quand grepping:

alias grep='tput rmam; { sleep 20 && tput smam & }; grep'

tput rmam désactive l'emballage.

{ sleep 20 && tput smam & } réactivera l'emballage en 20 secondes. le & à la fin le fait fonctionner en arrière-plan afin grep peut travailler dans l'intervalle. Vous devez réactiver l'emballage car ne pas avoir de problèmes avec votre terminal. Dans mon cas, tput rmam provoqué des commandes plus longues que la largeur du terminal pour se remplacer au lieu de s’enrouler sur une nouvelle ligne (très agaçante).

Et alors grep fait sa magie, sans emballage! Si l'exécution prend plus de 20 secondes, le retour à la ligne se fera avec une certaine vengeance. Vous pouvez donc le définir plus longtemps en fonction de votre système.


MODIFIER:

Une approche encore meilleure consiste à utiliser une fonction qui s'exécute automatiquement tput rmam avant votre grep et tput smam après:

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

Déposez ça dans votre .bash_profile et chaque fois que vous courez grp, il va grep sans ligne wrapping.


2
2018-06-01 19:22



le sleep 20 est incroyable :-) - Ciro Santilli 新疆改造中心 六四事件 法轮功


Essaye ça

function nowrap { export COLS=`tput cols` ; cut -c-$COLS ; unset COLS ; echo -ne "\e[0m" ; }

1
2018-01-11 01:14



désolé pour la pelle d'or - drigoSkalWalker