J'ai ce morceau de code ci-dessous:
echo " \033[33mTitle of the Program\033[0m"
qui change la couleur en jaune.
Comment puis-je faire clignoter le texte "Titre du programme"?
-e
si ça ne marche pas sans çaVous devrez peut-être ajouter l'option -e
à echo
(du moins c'est requis sur tous les systèmes ou la plupart des systèmes que j'utilise). Ce qui suit indiquera à votre système de faire clignoter le texte:
echo -e "\033[5mTitle of the Program\033[0m"
Et vous ne devez pas choisir soit jaune ou clignotant. Vous pouvez avoir votre gâteau et le manger aussi:
echo -e "\033[33;5mTitle of the Program\033[0m"
Votre système peut ignorer le code de clignotement - cela semble être assez courant. Si vous souhaitez que le texte soit visible, mais que le clignotement soit ignoré, vous pouvez inverser les couleurs avec 7
:
echo -e "\033[33;7mTitle of the Program\033[0m"
Ou vous pouvez utiliser le clignotement et inversion des couleurs (et le jaune):
echo -e "\033[33;5;7mTitle of the Program\033[0m"
Que vous puissiez faire fonctionner clignotant _ ou non dépend du émulateur de terminal. Le système lui-même n'est pas pertinent.
L'exemple donné dans la question était proche, nécessitant seulement une modification de la séquence d'échappement pour "fonctionner" avec tout POSIX Shell :
echo "\033[33;5mTitle of the Program\033[0m"
Le -e
suggéré n'est pas nécessaire (il s'agit d'un bashisme, non standard et généralement inutile). Changer le 7
(inversion) en 5
(clignotant) fait ce qui a été demandé.
Plutôt que de coder en dur l’échappement, vous pouvez utiliser tput
, par exemple,
printf '%s%s%s%s' "$(tput setaf 3)" "$(tput blink)" "Title of the Program" "$(tput sgr0)"
pour le même effet, avec deux différences:
$TERM
.Par exemple, VTE (la bibliothèque utilisée pour divers skins tels que gnome-terminal) ne supporte pas blink (et il est possible de trouver les avis de ses développeurs sur le sujet dans divers bogues rapports). L'utilisation de infocmp
pour afficher les capacités du terminal correspondant montre cela, ainsi que d'autres différences:
$ infocmp vte xterm
comparing vte to xterm.
comparing booleans.
km: F:T.
mc5i: F:T.
npc: F:T.
comparing numbers.
comparing strings.
blink: NULL, '\E[5m'.
cnorm: '\E[?25h', '\E[?12l\E[?25h'.
cvvis: NULL, '\E[?12;25h'.
enacs: '\E)0', NULL.
is2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
kb2: '\E[E', '\EOE'.
kfnd: '\E[1~', NULL.
kslt: '\E[4~', NULL.
mc0: NULL, '\E[i'.
mc4: NULL, '\E[4i'.
mc5: NULL, '\E[5i'.
rep: NULL, '%p1%c\E[%p2%{1}%-%db'.
rmacs: '^O', '\E(B'.
rmcup: '\E[2J\E[?47l\E8', '\E[?1049l'.
rmm: NULL, '\E[?1034l'.
rs2: '\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h', '\E[!p\E[?3;4l\E[4l\E>'.
setb: NULL, '\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m'.
setf: NULL, '\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m'.
sgr: '\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;', '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'.
sgr0: '\E[0m\017', '\E(B\E[m'.
smacs: '^N', '\E(0'.
smcup: '\E7\E[?47h', '\E[?1049h'.
smm: NULL, '\E[?1034h'.
Si vous utilisez KDE konsole
, les différences sont plus longues (bien que konsole
supporte clignote).
Un petit travail pour faire clignoter la ligne dans le script bash
for (( i=0;i<=3;i++))
do
#Below line will deleted the before printed line
echo -en "\033[1A"
echo -en "EmpNo:$empno already exists\n";
sleep 0.4s;
#Below line to print a blank line
echo -en "\033[1A"
echo -en " \n";
sleep 0.2s;
done
echo -en "\033[2A"
echo -en " \n";
echo -en "\033[1A"
echo -en "Enter the empno : "; read empno1;