J'utilise souvent quelque chose comme read -e -p "> All good ? (y/n)" -n 1 confirm;
pour demander une confirmation à l'utilisateur.
Je cherche un moyen de coloriser la sortie, comme le fait la commande echo -e
:
echo -e "\033[31m";
echo "Foobar"; // will be displayed in red
echo -e "\033[00m";
J'utilise xterm.
Dans man echo
, il est écrit:
-e permet l'interprétation des échappements de barre oblique inverse
Existe-t-il un moyen de faire la même chose avec la commande read
? (Rien dans la page de manuel: L'option (-r
ne fonctionne pas)
read
ne traitera aucune échappée spéciale dans l'argument de -p
, vous devez donc les spécifier littéralement. Les chaînes citées par ANSI de bash
sont utiles pour cela:
read -p $'\e[31mFoobar\e[0m: ' foo
Vous devriez aussi pouvoir taper un caractère d'échappement littéral avec Control-vEscape, qui apparaîtra sous la forme ^[
dans le terminal:
read -p '^[[31mFoobar^[[0m: ' foo
Divisez votre requête en deux composants:
par exemple:
echo -e -n "\e[0;31mAll good (y/n)? " # Display Prompt in red
echo -e -n '\e[0;0m' # Turn off coloured output
read # Collect the user input
L'option echo -n supprime le retour à la ligne final.
J'ai une autre solution qui vous permet d'utiliser des variables pour changer le format du texte. Je echo -e
la sortie que je veux dans l'argument -p
de la commande read
.
Voici un exemple:
RESET="\033[0m"
BOLD="\033[1m"
YELLOW="\033[38;5;11m"
read -p "$(echo -e $BOLD$YELLOW"foo bar "$RESET)" INPUT_VARIABLE