Commande de lecture: Affiche l’invite en couleur (ou autorise l’interprétation des échappements de barre oblique inverse)

J’utilise souvent quelque chose comme read -e -p "> All good ? (y/n)" -n 1 confirm; 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.

En man echo , il est dit:

-e permettre l’interprétation des échappements antislash

Est-il possible de faire la même chose avec la commande de read ? (rien dans la page de manuel 🙁 -r option ne fonctionne pas)

read ne traitera aucun échappement spécial dans l’argument de -p , vous devez donc les spécifier littéralement. Les chaînes ANSI citées par bash sont utiles pour cela:

 read -p $'\e[31mFoobar\e[0m: ' foo 

Vous devriez également pouvoir taper un caractère d’échappement littéral avec Control -v Escape , qui apparaîtra sous la forme ^[ dans le terminal:

 read -p '^[[31mFoobar^[[0m: ' foo 

Divisez votre requête en deux composants:

  1. utilisez echo -e -n pour afficher l’invite
  2. recueillir la réponse de l’utilisateur avec read

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 la nouvelle ligne.

J’ai une autre solution qui vous permet d’utiliser des variables pour changer le format du texte. Je fais 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 

ce travail pour moi:

  BC=$'\e[4m' EC=$'\e[0m' while true; do read -p "Do you wish to copy table from ${BC}$HOST $PORT${EC} to ${BC}$LOCAL_HOST $LOCAL_PORT${EC}? (y or n)" yn case $yn in .... done 

Les résultats sont les suivants: entrer la description de l'image ici

Plus d’exemple, voir le show case, le lien est:

mysqlis