สคริปต์เพื่อแสดงสีเทอร์มินัลทั้งหมด


74

~/.Xdefaultsตลอดอินเทอร์เน็ตฉันได้เห็นผู้คนจำนวนมากที่มีสคริปต์ที่พิมพ์ออกพวงของสิ่งที่อยู่ในทุกสีที่กำหนดไว้ใน error: Bad Substitutionแต่เมื่อฉันพยายามที่จะใช้เหล่านี้ผมเคยได้รับ ใครบ้างมีสคริปต์การทำงานที่ทำสิ่งเดียวกันหรือไม่

มันควรจะจบลงด้วยการมองสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่


1
อาจจะง่ายกว่านี้ถ้าคุณโพสต์สคริปต์ที่คุณใช้และวิธีการที่คุณจะเรียกใช้
luri

1
คุณสามารถค้นหาคอลเลกชันของสคริปต์สำหรับการนี้ในArchWiki
aloisdg

1
ฉันบรรจุสคริปต์การพิมพ์สีสองสามชุดแล้ววางไว้ที่นี่พร้อมตัวอย่างขอบคุณและติดตั้งชง
pvinis

1
@pvinis ขอบคุณ! ฉันใช้เวลามากเกินไปในการพยายามค้นหาสิ่งที่แน่นอนที่แสดงในหน้าจอของ OP
verboze

1
FWIW นี้น่าจะเป็นภาพที่มาจาก: web.archive.org/web/20110809032233/https://bbs.archlinux.org/... โพสต์รวมถึงรูปแบบสีที่ใช้และโพสต์เปิดในหัวข้ออ้างอิงรหัสที่มาที่ใช้ในการสร้างภาพ
mwfearnley

คำตอบ:


74

นี่เป็นวิธีแก้ปัญหาของฉันกับ Bash เท่านั้น:

for x in {0..8}; do 
    for i in {30..37}; do 
        for a in {40..47}; do 
            echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "
        done
        echo
    done
done
echo ""

หนึ่งในสายการบิน:

for x in {0..8}; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo ""

นี่คือรูปภาพใน Cygwin:

สกรีนช็อต Cygwin


1
FYI {30..37}เทียบเท่ากับ`seq 30 37`ทุบตีและเร็วกว่า
Barry Kelly

1
@BarryKelly: เคล็ดลับดีขอบคุณ เพิ่งทดสอบและตามที่คุณสังเกต: มันเร็วกว่ามากจริงๆ !!! :-) ดังนั้นนี่คือรายการใหม่:for x in 0 1 4 5 7 8; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo "";
oktay

จะใช้งานกับ Mac ได้หรือไม่
kyo

@ihue ดูว่าข้อมูลนี้สามารถตอบคำถามของคุณ: เคล็ดลับง่ายๆในการปรับปรุงลักษณะที่ปรากฏร์มินัลใน Mac OS X สำหรับรายละเอียดเพิ่มเติมตรวจสอบAskDifferent.com
wjandrea

โค้ดตัวอย่างไม่ทำงานบน MacOS แต่คำตอบของ python นั้นใช้ได้
โซริน

40

คุณยังสามารถใช้colortest ติดตั้ง colortestแพ็คเกจ

  1. ติดตั้งด้วยคำสั่งนี้:

    sudo apt-get install colortest
  2. มันมีหลายคำสั่งที่คุณสามารถใช้ได้ขึ้นอยู่กับจำนวนสีที่คุณต้องการ:

    colortest-16   colortest-16b  colortest-256  colortest-8

ตัวอย่างผลลัพธ์จากcolortest-16b:

ป้อนคำอธิบายรูปภาพที่นี่


33

นี่คือรุ่นของฉัน:

#!/usr/bin/env python
import sys
terse = "-t" in sys.argv[1:] or "--terse" in sys.argv[1:]
write = sys.stdout.write
for i in range(2 if terse else 10):
    for j in range(30, 38):
        for k in range(40, 48):
            if terse:
                write("\33[%d;%d;%dm%d;%d;%d\33[m " % (i, j, k, i, j, k))
            else:
                write("%d;%d;%d: \33[%d;%d;%dm Hello, World! \33[m \n" %
                      (i, j, k, i, j, k,))
        write("\n")

นี้จะพิมพ์ทุกอย่าง หากคุณต้องการตารางที่ดี (ที่แสดงเฉพาะสไตล์ (0) และ (1) ปกติและหนา) คุณสามารถใช้-tหรือ--terseอาร์กิวเมนต์:

สไตล์ 'กะพริบ' (5) ไม่สามารถใช้งานได้กับ gnome-terminal ;-)


หากสิ่งนี้ไม่ได้ผลสำหรับคุณอาจมีบางอย่างผิดปกติ โปรดแจ้งให้เราทราบเมื่อคุณทำการทดสอบแล้ว


สีที่พรอมต์ของฉันกำหนดไว้ดังนี้: DULL=0 BRIGHT=1 FG_WHITE=37 WHITE="\[$ESC[${DULL};${FG_WHITE}m\]"ทำไมจึงเป็นเช่นนั้นสีขาวทึบ ( 0;37;40) เป็นสีเทามากกว่าสีขาวและสีขาวสว่าง ( 1;37;40) เป็นตัวหนา? ฉันต้องการตั้งค่าฟอนต์เทอร์มินัลเป็นขาว - ดำ - ดำไม่ใช่ตัวหนา เมื่อฉันเรียกใช้สคริปต์ของคุณ1;37;40มีลักษณะที่ดีเลิศ Allright หลังจากบรรทัดแรก : 5img.com/img13/740/24screenshot.pngดังนั้นบรรทัด PS1 ของฉันอยู่ในสีของข้อความ0;30;40; 0;30;41ฉันต้องการมันในสีของ
appas

ไม่มีใครพบสีม่วงแดงนี้น่าเกลียดโดยเฉพาะอย่างยิ่ง? ดูเหมือนโคลน
อีเธอร์

คุณเป็นพระเจ้าในหมู่มนุษย์ สุดยอดโซลูชันข้ามแพลตฟอร์ม ขอบคุณ
อังเดรเทอร์ร่า

24

ซับในแบบง่าย ๆ ที่ควรใช้กับคนส่วนใหญ่

msgcat --color=test

Deadsimple เป็นไปได้หรือไม่ที่จะได้สีพื้นหลังเริ่มต้นเท่านั้น?
vrcmr

msgcat - ช่วยไม่ได้อธิบายว่าคุณได้ทำ ... มันเป็นไข่อีสเตอร์หรือไม่
vrcmr

@ vrcmr ฉันเจอหนึ่งซับในบล็อกนี้ที่ไหนสักแห่งที่ผ่านมาและน่าเสียดายที่ไม่สามารถพูดถึง--color=testใน msgcat man page ได้เช่นกัน ฉันคิดว่ามันเป็นไข่อีสเตอร์ที่ไม่สามารถกำหนดค่าได้
JacK TrocinskI

สำหรับใครก็ตามที่สนใจ--color=testสามารถพูดถึงในหัวข้อ 9.11.2 ตัวแปรสภาพแวดล้อม 'TERM' ใต้info msgcat
Gerrit0

7

ฉันทำสคริปต์เล็กน้อยเพื่อที่ :)

คุณส่งตัวเลขnและแยกnเส้นสีออกมาพร้อมกับดัชนี ansi ของแต่ละสี (คุณสามารถใช้มันได้$(tput setaf <ansi-index>))

นี่คือภาพหน้าจอของเอาต์พุต (บางส่วน):

ANSI สี

ฉันยังได้อันนี้ซึ่งฉันแยกจากกัน (และแก้ไขเล็กน้อย) จากtwerth :

#!/usr/bin/env bash

echo -e "\033[0mNC (No color)"
echo -e "\033[1;37mWHITE\t\033[0;30mBLACK"
echo -e "\033[0;34mBLUE\t\033[1;34mLIGHT_BLUE"
echo -e "\033[0;32mGREEN\t\033[1;32mLIGHT_GREEN"
echo -e "\033[0;36mCYAN\t\033[1;36mLIGHT_CYAN"
echo -e "\033[0;31mRED\t\033[1;31mLIGHT_RED"
echo -e "\033[0;35mPURPLE\t\033[1;35mLIGHT_PURPLE"
echo -e "\033[0;33mYELLOW\t\033[1;33mLIGHT_YELLOW"
echo -e "\033[1;30mGRAY\t\033[0;37mLIGHT_GRAY"

…ซึ่งในธีมปัจจุบันของฉันแสดง:

เทอร์มินัลทำให้ (สีมัน)!


จะใช้งานกับ Mac ได้หรือไม่
kyo

นี่เป็นเพียง 7 สีที่เรามีหรือไม่?
kyo

@ihue - แน่นอนไม่ได้ฉันทำสคริปต์สำหรับว่า .. ตรวจสอบออก คุณสามารถส่งผ่านตัวเลขn(เช่น256) และมันจะพ่นnสีที่เทอร์มินัลของคุณรองรับ
Eliran Malka

สคริปต์ของคุณเจ๋ง แต่#!/usr/bin/env shไม่ใช่ความคิดที่ดี มันไม่ทำงานกับเชลล์เริ่มต้นของ Ubuntu ซึ่งเป็นเส้นประ ฉันต้องเปลี่ยนมันเป็นทุบตี
Teresa e Junior

5

เมื่อเร็ว ๆ นี้ต้องการพบว่าสคริปต์ที่หลายคนกำลังอ้างอิงตัวเอง มันจาก HOWTO Prompt tldp.org ทุบตี - http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html สคริปต์นี้เขียนโดย Daniel Crisman

มันส่งผลเช่นเดียวกับในรูปจากคำถาม สคริปต์ตัวเอง:

#!/bin/bash
#
#   This file echoes a bunch of color codes to the 
#   terminal to demonstrate what's available.  Each 
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a 
#   test use of that color on all nine background 
#   colors (default + 8 escapes).
#

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";
  done
  echo;
done
echo


1

นี้เป็นรุ่นที่แก้ไขของสคริปต์ TLDP ที่นี่ มันแสดงสีมาตรฐานและสีสดใส (รหัส 90-97 และ 100-107)

#!/bin/bash
# Show available terminal colours.
# Heavily modified version of the TLDP script here:
# http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

print_colors(){
  # Print column headers.
  printf "%-4s  " '' ${bgs[@]}
  echo
  # Print rows.
  for bold in ${bolds[@]}; do
    for fg in ${fgs[@]}; do
      # Print row header
      printf "%s;%s  " $bold $fg
      # Print cells.
      for bg in ${bgs[@]}; do
        # Print cell.
        printf "\e[%s;%s;%sm%s\e[0m  " $bold $fg $bg "text"
      done
      echo
    done
  done
}

# Print standard colors.
bolds=( 0 1 )
fgs=( 3{0..7} )
bgs=( 4{0..8} )
print_colors

# Print vivid colors.
bolds=( 0 ) # Bold vivid is the same as bold normal.
fgs=( 9{0..7} )
bgs=( 10{0..8} )
print_colors

ตัวอย่างผลลัพธ์:

ภาพหน้าจอ gnome-terminal


0

คำถามนี้เป็นผลลัพธ์อันดับต้น ๆ เมื่อฉันค้นหาวิธีแสดงรหัสสีในเทอร์มินัล ดังนั้นฉันจึงต้องการให้ความยุติธรรมและให้สิ่งที่ OP ต้องการอย่างแท้จริง ฉันจำได้ว่าภาพหน้าจอค่อนข้างคุ้นเคย ตอนแรกฉันคิดว่ามันมาจากGoghแต่มันแตกต่างกันเล็กน้อย จากนั้นผมก็รู้ว่ามันเป็นสิ่งสคริปต์เดียวกันถูกใช้ในการสี iTerm2

โชคดีที่พวกเขาเพิ่มความคิดเห็นว่ามันมาจากที่ใด

ฉันโพสต์สคริปต์สำหรับการอ้างอิงนำมาจากiTerm2ด้วยเครดิตดั้งเดิม:

#!/bin/bash
#
#   This file echoes a bunch of color codes to the
#   terminal to demonstrate what's available.  Each
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a
#   test use of that color on all nine background
#   colors (default + 8 escapes).
#
#   Copied from http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";
  done
  echo;
done
echo

นี่คือสคริปต์ที่ใช้งานจริง:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.