40 votes

Comment faire en sorte que bash ne coupe pas la sortie ?

Chaque fois qu'une commande génère des lignes longues en sortie ( par exemple, lorsque ls -l un dossier contenant des fichiers avec des noms longs ), les lignes longues sont enveloppées sur la ligne suivante, perturbant ainsi la structure en colonnes.

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


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"
et ensuite j'essaie de filtrer sa sortie: ll | grep foo
il affichera toujours tous les fichiers, comme sans le grep.

La solution que j'ai trouvée est d'encadrer tout l'alias entre parenthèses :
alias ll="(tput rmam; ls -l; tput smam)"

30voto

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 à voir avec le terminal.

La plupart des émulateurs de terminal effectuent un retour à la ligne automatiquement à la marge 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 le prend en charge ; alors, les lignes longues sont simplement tronquées :

printf '\033[?7l'
ls -l /un/dossier/qui/contient/des/fichiers/avec/de/longs/noms
printf '\033[?7h'

22voto

Damian Powell Points 315

Si vous souhaitez pouvoir faire défiler horizontalement au lieu de tronquer les lignes, utilisez less -S.

6voto

Dalroth Points 2468

Vous pourriez utiliser une fonction de cette manière :

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

Gardez à l'esprit que vous devrez préfixer les commandes avec nowrap ou tout autre nom que vous donnez à la fonction.

4voto

ognockocaten Points 218

Vous pouvez remplacer une fonction pour qu'elle exécute automatiquement tput rmam avant votre grep et tput smam après :

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

Intégrez cela dans votre .bash_profile et chaque fois que vous exécutez grep, il grep sans retour à la ligne.

Ce texte a été fortement édité, désolé pour les commentaires.

4voto

qartal Points 141

Redirigez-le vers la commande less avec l'option -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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X