web-dev-qa-db-fra.com

Changer de police dans la commande Echo

Est-il possible de modifier les attributs de police de la sortie de l'écho dans ZSH ou BASH?

Ce que je voudrais, c'est quelque chose de semblable à:

echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".

de sorte qu'il imprime: "Ceci est la police: normale, italique , graspetit"Dans une ligne de texte.

Sur la plupart des émulateurs de terminaux, vous ne pouvez pas définir différentes tailles de police ou différentes polices, uniquement des couleurs et quelques attributs (gras, souligné, standout).

Dans BASH (ou dans ZSH ou TOUT autre shell), vous pouvez utiliser le terminal séquences d'échappement directement (en dehors de quelques terminaux exotiques, tous les terminaux suivent le fil de Xterm de ces jours). CSI est ESC [, écrit $'\e[' à bash. La séquence d'évacuation pour changer les attributs est CSI Ps m.

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'

ZSH a une fonction pratique pour cela.

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e'$color[underline]munderlined

Vous pouvez inclure ces définitions de couleur dans un script ou un fichier source. Pourrait ressembler à quelque chose comme ça.

#!/bin/bash
PATH=/bin:/usr/bin:

NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'

echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."

tput sgr0

Notez que vous devriez réinitialiser les codes de couleur ANSI après chaque instance que vous appelez un changement. Les tput sgr0 Réinitialise toutes les modifications que vous avez faites dans le terminal.

Je crois que la modification de la taille de la police ou des italiques serait spécifique au terminal que vous utilisez.

Bien que cela guide soit spécifique à la personnalisation de votre invite Bash, il s'agit d'une bonne référence pour les codes de couleur et génère des idées de ce que vous pouvez faire.

16
George M

Semble que la mise en page ne peut pas gérer le [0x1b]- caractère devant le [.

La première ligne fait audacieux:

 echo -e "\x1b[1m bold"
     echo -e "\x1b[30m black"
     echo -e "\x1b[31m red"
     echo -e "\x1b[32m green"
     echo -e "\x1b[33m yellow"
     echo -e "\x1b[34m blue"
     echo -e "\x1b[35m mag"
     echo -e "\x1b[36m cyan"
     echo -e "\x1b[37m white"   

Pour le type général, je sais seulement

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"

et des commentaires, merci Manatwork et Gypsycosmonaut:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

et ne connaissez pas la différence entre IO-STD et Normal.

Je n'ai pas vu italique ou petit dans la coquille.

Vous pouvez les entrer (grâce à la manatorisation aussi) par CtrlvESC Dans la bash, où il sera affiché comme ^[. Cela signifie que toute la séquence ANSI ressemblera à ^[[1m bold ou ^[[1mbold (Pour éviter le blanc avant "audacieux").

De nombreux éditeurs ont des problèmes avec (char) 0x1b. Alternatives: Copiez/collez-la depuis quelque part ou utilisez

echo -e "\x1b[1m bold"

en bash, ou un éditeur hexagonal.

5
user unknown

Ici:

http://fr.wikipedia.org/wiki/ansi_escape_code

(Remarque: beaucoup d'entre eux ne fonctionnent généralement pas, mais la plupart d'entre eux sont marqués ainsi.)

Je fais une partie dans le terminal et je compte fortement sur le lien ci-dessus. Il vous dit même comment cacher/afficher le curseur, faire de la couleur (30), "Bold" (briquet), plus sombre, souligné, couleur italique (40's au lieu de 30 ans), etc. Vous pouvez également changer l'emplacement du curseur ( Ce qui est très utile - par exemple, "\x1B[1A" déplace le curseur sur une ligne; "\x1B[0;0H" déplace le curseur sur la rangée 0, Col 0; "\x1B[2J" efface l'écran; "\x1B[2K" Efface la ligne.

Pour vos besoins, les gens l'ont dit:

echo -e "\x1b[30;44m black with blue background \x1b[m"

echo -e "\x1b[31;42m red with green background \x1b[m"

echo -e "\x1b[32;40m green with black background \x1b[m"

echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"

Remarque: Vous besoin le -e dans

echo **-e** "\x1b[35;1m Light purple \x1b[m"

ou vous devez utiliser des guillemets simples. Taper man echo Pour voir pourquoi (des devis doubles sont généralement une douleur lors de l'impression; quand j'ai besoin de choses pour ne pas développer ou j'ai besoin de séquences d'échappement ansi, j'utilise des guillemets simples, car il est facile - même si je me suis habitué à ce que je sache de le faire tellement fois - oublier le - E auquel cas vous obtenez "box with numbers and letters [35; 1m ").

Chaque fois que vous voyez CSI le remplacer par "\x1b[" (ou "\e[" ou "\u1b["). "\x1b[" Je pense que c'est plus standard, mais je ne sais pas vraiment quelle est la différence entre eux.

0
Dylan