web-dev-qa-db-fra.com

Comment obtenir le script shell osx pour afficher les couleurs en écho

J'essaie d'ajouter une sortie couleur à mes erreurs dans un script bash que j'ai exécuté sur un mac. Le problème est que les couleurs ne fonctionnent pas. J'ai créé le plus simple des scripts pour démontrer qu'il ne fonctionne pas:

#!/bin/bash

echo -e "\e[1;31m This is red text \e[0m"

Cependant, lorsque je l'exécute, je ne vois aucune couleur, comme le montre cette image. Cependant, la sortie couleur de la commande ls fonctionne correctement.

enter image description here

33
nycynik

OSX est livré avec une ancienne version de Bash qui ne prend pas en charge le \e caractère d'échappement. Utilisation \x1B ou mettre à jour Bash (brew install bash).

Encore mieux, cependant, serait d'utiliser tput.

33
danemacmillan

Utilisation \033 ou \x1B au lieu de \e pour représenter de <Esc> personnage.

echo -e "\033[1;31m This is red text \033[0m"

Voir http://misc.flogisoft.com/bash/tip_colors_and_formatting

66
guapolo

Une autre option pourrait être d'utiliser zsh, qui respecte le \e notation.

#!/bin/zsh
4
Adam Matan

Dans les fichiers de script, printf pourrait être une autre option, vous devez cependant ajouter "\n" À la fin.

#!/bin/bash

echo -e "\e[31mOutput as is.\e[m"
printf "\e[32mThis is green line.\e[m\n"
printf "\e[33;1m%s\n" 'This is yellow bold line.'

Testé sur macOS High Sierra 10.13.6:

% /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-Apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
3
cu39