[linux] كيفية تغيير لون خرج الصدى في لينكس


Answers

يمكنك استخدام الأمر tput الرائع (المقترح في إجابة Ignacio ) لإنتاج رموز التحكم الطرفية لجميع أنواع الأشياء.

استعمال

tput أوامر فرعية فرعية محددة في وقت لاحق.

مباشرة

استدعاء tput كجزء من تسلسل الأوامر:

tput setaf 1; echo "this is red text"

استخدام بدلاً من && حتى إذا كانت أخطاء tput لا يزال النص يظهر.

متغيرات شل

خيار آخر هو استخدام متغيرات shell:

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

ينتج tput تسلسلات الأحرف التي يفسرها المطراف على أنه له معنى خاص. لن يظهروا أنفسهم. لاحظ أنه لا يزال من الممكن حفظها في ملفات أو معالجتها كمدخلات بواسطة برامج أخرى غير الطرفية.

استبدال القيادة

قد يكون أكثر ملاءمة لإدخال tput مباشرة في سلاسل echo الخاصة بك باستخدام تبديل الأمر :

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

مثال

الأمر المذكور أعلاه ينتج عن هذا على Ubuntu:

أوامر اللون الأمامية والخلفية

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

الألوان هي كما يلي:

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

هناك أيضًا إصدارات غير ANSI لوظائف إعداد اللون ( setb بدلاً من setab ، و setf بدلاً من setaf ) التي تستخدم أرقامًا مختلفة ، غير معطاة هنا.

أوامر وضع النص

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

أوامر حركة المؤشر

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

واضح وأدخل الأوامر

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

أوامر أخرى

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

مع النوافذ المتذبذبة ، يؤدي الأمر bel إلى تمايل الجهاز لمدة ثانية لجذب انتباه المستخدم.

مخطوطات

يقبل tput البرامج النصية التي تحتوي على أمر واحد لكل سطر ، والتي يتم تنفيذها بالترتيب قبل خروج tput .

تجنب الملفات المؤقتة بترديد سلسلة متعددة الأسطر وتمديدها:

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

أنظر أيضا

  • انظر man 1 tput
  • انظر man 5 terminfo للحصول على القائمة الكاملة للأوامر والمزيد من التفاصيل حول هذه الخيارات. (يتم سرد الأمر tput المطابق في عمود Cap-name في الجدول الضخم الذي يبدأ في السطر 81.)
Question

أحاول طباعة نص في الوحدة باستخدام أمر echo.

أريد طباعة النص بلون أحمر. كيف أقوم بذلك؟




لقد كتبت swag لتحقيق ذلك.

يمكنك فقط القيام به

pip install swag

يمكنك الآن تثبيت جميع أوامر الهروب كملفات txt إلى وجهة معينة عبر:

swag install -d <colorsdir>

أو حتى أسهل عبر:

swag install

والتي ستقوم بتثبيت الألوان على ~/.colors .

إما أن تستخدمها مثل هذا:

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

أو بهذه الطريقة ، التي أجدها أكثر إثارة للاهتمام:

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

التحقق من ذلك على asciinema !




للتوسع في هذا الجواب ، كسولنا:

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"



هذا هو لون التبديل \033[ . انظر history .

codes الألوان مثل 1;32 (أخضر فاتح) ، 0;34 (أزرق) ، 1;34 (أزرق فاتح) ، إلخ.

ننهي تسلسلات الألوان مع تبديل اللون \033[ و 0m ، رمز no -color. تمامًا مثل فتح وإغلاق علامات التبويب بلغة الترميز.

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

حل وظيفة echo اللون بسيطة:

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!"



استخدم tput مع إمكانية setaf ومعلمة من 1 .

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



يجب عليك بالتأكيد استخدام tput عبر تسلسلات تحكم ANSI raw.

نظرًا لوجود عدد كبير من لغات التحكم الطرفية المختلفة ، عادة ما يكون النظام به طبقة اتصال وسيطة. يتم البحث عن الرموز الحقيقية في قاعدة بيانات لنوع المحطة الطرفية المكتشفة حاليًا وتعطي الطلبات القياسية إلى API أو (من shell) إلى أمر.

واحد من هذه الأوامر هو 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:




تعمل هذه الأكواد على صندوق أوبونتو الخاص بي:

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"

هذا يطبع الحروف abcd كلها بألوان مختلفة:

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

لحلقة:

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




استخدم tput لحساب رموز اللون. تجنب استخدام رمز الهروب ANSI (على سبيل المثال \E[31;1m for red) لأنه أقل محمولاً. باش على OS X ، على سبيل المثال ، لا يدعمها.

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"



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")



إجابتي المفضلة حتى الآن ملونة.

فقط لنشر خيار آخر ، يمكنك التحقق من هذا xcol أداة صغيرة

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

يمكنك استخدامه مثل grep ، وسيقوم بتلوين stdin بلون مختلف لكل وسيطة ، على سبيل المثال

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

لاحظ أنه يقبل أي تعبير عادي تقبله sed.

هذه الأداة تستخدم التعريفات التالية

#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

أستخدم هذه المتغيرات في النصوص الخاصة بي مثل ذلك

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



Related