Wie ändert man die Ausgabefarbe des Echos in Linux?



9 Answers

Sie können den Befehl awesome tput (wie in Ignacios Antwort vorgeschlagen ), um Terminalsteuercodes für alle möglichen Dinge zu erzeugen.

Verwendung

tput Unterbefehle werden später besprochen.

Direkte

Rufen Sie tput als Teil einer tput :

tput setaf 1; echo "this is red text"

Verwenden Sie ; anstelle von && , wenn Fehler auftreten, wird der Text immer noch tput .

Shell-Variablen

Eine weitere Option ist die Verwendung von Shell-Variablen:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput erzeugt Zeichenfolgen, die vom Terminal als eine besondere Bedeutung interpretiert werden. Sie werden nicht selbst gezeigt. Beachten Sie, dass sie weiterhin in Dateien gespeichert oder von anderen Programmen als dem Terminal verarbeitet werden können.

Befehlsersetzung

Es kann bequemer tput , die Ausgabe von tput direkt in Ihre echo Strings einzufügen, tput Sie die Befehlsersetzung verwenden :

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

Beispiel

Der obige Befehl erzeugt dies unter Ubuntu:

Vordergrund- und Hintergrundfarbbefehle

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Farben sind wie folgt:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Es gibt auch Nicht-ANSI-Versionen der Farbeinstellungsfunktionen ( setb anstelle von setab und setf anstelle von setaf ), die verschiedene Zahlen verwenden, die hier nicht angegeben sind.

Textmodusbefehle

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

Cursorbewegungsbefehle

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Löschen und Einfügen von Befehlen

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Andere Befehle

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

Bei compiz wobbly windows sorgt der bel Befehl dafür, dass das Terminal für eine Sekunde wackelt, um die Aufmerksamkeit des Benutzers auf sich zu ziehen.

Skripte

tput akzeptiert Skripte mit einem Befehl pro Zeile, die in der Reihenfolge ausgeführt werden, bevor tput .

Vermeiden Sie temporäre Dateien, indem Sie einen mehrzeiligen String wiederholen und ihn damit verbinden:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Siehe auch

  • Siehe man 1 tput
  • Eine vollständige Liste der Befehle und weitere Details zu diesen Optionen finden Sie unter man 5 terminfo . (Der entsprechende tput Befehl wird in der Cap-name Spalte der riesigen Tabelle aufgeführt, die in Zeile 81 beginnt.)
Question

Ich versuche, einen Text im Terminal mit echo-Befehl zu drucken.

Ich möchte den Text in roter Farbe drucken. Wie kann ich das machen?




Meine Lieblingsantwort ist bisher ColoredEcho.

Um eine weitere Option zu veröffentlichen, können Sie dieses kleine Tool xcol ausprobieren

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

Sie verwenden es genauso wie grep und es wird beispielsweise seine stdin für jedes Argument mit einer anderen Farbe färben

sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

Beachten Sie, dass es jeden regulären Ausdruck akzeptiert, den sed akzeptiert.

Dieses Tool verwendet die folgenden Definitionen

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple"                       # bright magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text

Ich benutze diese Variablen in meinen Skripten so

echo "${red}hello ${yellow}this is ${green}coloured${normal}"



Ich habe swag geschrieben, um genau das zu erreichen.

Du kannst es einfach tun

pip install swag

Jetzt können Sie alle Escape-Befehle als txt-Dateien an einem bestimmten Ziel installieren über:

swag install -d <colorsdir>

Oder noch einfacher über:

swag install

Welche installiert die Farben zu ~/.colors .

Entweder benutzt du sie so:

echo $(cat ~/.colors/blue.txt) This will be blue

Oder auf diese Weise, die ich eigentlich interessanter finde:

swag print -c red -t underline "I will turn red and be underlined"

asciinema Sie es auf asciinema !




Verwenden Sie tput mit der setaf Fähigkeit und einem Parameter von 1 .

echo "$(tput setaf 1)Hello, world$(tput sgr0)"



Verwenden Sie tput , um Farbcodes zu berechnen. Vermeiden Sie die Verwendung des ANSI-Escape-Codes (z. B. \E[31;1m für Rot), da dieser weniger tragbar ist. Bash unter OS X zum Beispiel unterstützt dies nicht.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"



Dies ist der Farbschalter \033[ . Siehe history .

codes sind wie 1;32 (Hellgrün), 0;34 (Blau), 1;34 (Hellblau) usw.

Wir beenden Farbsequenzen mit einem Farbschalter \033[ und 0m , dem Nicht- Farbcode. Genauso wie das Öffnen und Schließen von Tabs in einer Auszeichnungssprache.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Einfache echo Funktionslösung:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"



Um diese Antwort zu erweitern, für die Faulen von uns:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"



Sie sollten auf jeden Fall tput über rohe ANSI-Kontrollsequenzen verwenden.

Da es eine große Anzahl verschiedener Terminalsteuerungssprachen gibt, hat ein System normalerweise eine Zwischenkommunikationsschicht. The real codes are looked up in a database for the currently detected terminal type and you give standardized requests to an API or (from the shell) to a command.

One of these commands is tput . tput accepts a set of acronyms called capability names and any parameters, if appropriate, then looks up the correct escape sequences for the detected terminal in the terminfo database and prints the correct codes (the terminal hopefully understands).

from http://wiki.bash-hackers.org/scripting/terminalcodes

That said, I wrote a small helper library called bash-tint , which adds another layer on top of tput, making it even simpler to use (imho):

Example: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

Would give the following result:




Just as something a little out there, passing it through grep will highlight it as red (but only red). You can also use named pipes so your string is nearer to the end of the line:

 grep '.*' --color=always <(echo "foobar")



Diese Codes funktionieren auf meiner Ubuntu-Box:

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

Dies druckt die Buchstaben abcd alle in verschiedenen Farben:

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

Für Schleife:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done




Related