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:
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:
Plus d’exemple, voir le show case, le lien est:
mysqlis