Si je lance, ls
j'obtiens une sortie colorée que je trouve assez pratique pour obtenir rapidement un aperçu du type de fichier. Lorsque j'essaie de le canaliser less
avec les drapeaux -r
et, -R
la coloration se perd toujours. J'utilise la zsh
version 5.0.7. Des idées? Merci.
edit: je suis sur OS X.
ls
est invoqué avec--color
? Essayez de suspendre le pipeline (^Z
) ou d'utiliser àps
partir d'un autre terminal. Quelle sortiewhich ls
produit?less -r
donc ce n'est pas un problème avecless
mais avecls
ls
résultat dépend de stdout). Celui dont je me souviens est unix.stackexchange.com/questions/157285/… qui lui-même est marqué comme double de unix.stackexchange.com/questions/10421/…ls --color=auto
signifie utiliser la couleur uniquement lors de l'écriture sur un terminal (c'est-à-dire lorsque la sortie standard est un terminal), et non lorsqu'il s'agit d'un fichier ou d'un canal.Réponses:
Ceci est voulu par la conception même du produit: les programmes qui produisent une sortie colorée ne le font généralement que lorsque leur sortie est envoyée vers un terminal, et non lorsqu'elle est envoyée vers un canal ou vers un fichier normal. La raison en est que les données envoyées sur un terminal sont vraisemblablement lues par un humain, tandis que les données transmises à un programme ou écrites dans un fichier sont susceptibles d'être analysées par un programme, de sorte qu'elles ne devraient pas contenir de contenu étranger comme des séquences d'échappement à changement de couleur. .
GNU
ls
affiche une sortie colorée sur un terminal lorsque vous passez l'option--color
(ou--color=auto
). Pour forcer la sortie colorée quel que soit le type de fichier de la sortie standard, passez--color=always
ou--color=yes
(ce sont des synonymes). Cette convention a été suivie par d'autres commandes, comme GNU grep, FreeBSD grepgit diff
, etc.Avec la version FreeBSD de
ls
(également disponible sur OSX, et disponible commecolorls
port sur OpenBSD et NetBSD), passez l'option-G
pour afficher les couleurs lorsque la sortie est un terminal. Définissez l'environnementCLICOLOR_FORCE
pour afficher les couleurs quel que soit le type de fichier de sortie.la source
Le problème est probablement que votre
ls
programme a défini une option,--color=auto
ce qui signifie que la sortie ne doit être colorée que si elle est connectée au terminal, sinon (sortie connectée à un tuyau ou à un fichier) aucune couleur n'est émise.Si vous souhaitez avoir des couleurs dans de tels cas, vous devez définir l'
--color
option suralways
, essayez doncSi ce comportement est ce que vous attendez tout le temps, créez simplement un alias:
la source
ls
ne vient pasbash
, c'est un programme autonome. Exécutezls --version
pour vérifier sa version. Le mien est ls GNU coreutils) 8.21 .ls
version n'a pas le--version
drapeau. J'utilise celui par défaut d'OS X, je ne sais pas si cela aide.Je ne peux pas commenter la réponse de @jimmij, car j'ai moins de 50 représentants, mais je voudrais expliquer ce qui a fonctionné pour moi à Bash.
Si vous courez
vous verrez toutes les entrées de la page
man
pour votre environnement shell spécifique (dans notre casbash
).Pour moi, l'ajustement suivant a fait l'affaire:
la source
-G
drapeau n'a rien à voir avec la façon dontls
gère sa sortie colorée. Cela supprime simplement les groupes de la sortie dels -l
. Cela affecte la sortie couleur dans BSD ls (celle utilisée également sur OSX), c'est ce que vous voulez dire? Dans tous les cas, je ne pense pas que cela affichera la couleur lorsqu'il sera redirigé vers un fichier, il affichera simplement la couleur sur la ligne de commande.