สีที่ต่างกันสำหรับคำสั่งและเอาท์พุท


12

ฉันสงสัยว่ามันเป็นไปได้ที่จะเปลี่ยนสีของเอาท์พุทของคำสั่งใน linux เป็นสีที่แตกต่างจากของบรรทัดคำสั่งที่ฉันพิมพ์มามันน่าเบื่อและหายากที่จะเริ่มต้นออก ชอบ,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

ขอบคุณ


2
อาจใช้ precmd_functions คุณสามารถเปลี่ยนสีที่พรอมต์และตั้งค่ากลับมาก่อน preexec_functions หรืออะไรทำนองนั้น (ใน zsh ฉันไม่ทราบว่ามีเทียบเท่าสำหรับเปลือกหอยอื่น ๆ )
pataluc

ฉันเพิ่งลองคำแนะนำของฉัน แต่ฉันไม่ได้รับสีของคำสั่ง ... :(
pataluc

1
@ papuc: ฉันประสบความสำเร็จด้วยpreexec () { echo -n "\\e[40;34m" }; precmdไม่จำเป็นต้องใช้ฟังก์ชั่น IMHO ดูเหมือนว่า zsh จะรีเซ็ตสีของตัวเองก่อนที่จะแสดงพรอมต์ แต่นั่นใช้ได้ผลกับคำสั่งเหล่านั้นเท่านั้นที่จะไม่เปลี่ยนสีของตัวมันเอง (ตัวอย่างที่โดดเด่นคือls) ตามที่แอรอนบอก ด้วยcat,, bcคำสั่ง builtin shell, ฯลฯ (แม้alpine) สิ่งนี้ใช้ได้ดี
mpy

@mpy ฉันยังประสบความสำเร็จด้วยคำสั่งทั้งหมดสมมติว่า raj ต้องการสีคำสั่งและไม่ใช่ผลลัพธ์ฉันเพิ่ม"\\e[40;34m"ที่ส่วนท้ายของPROMPTvar ของฉันและตั้งค่ากลับเป็นสีขาวด้วยpreexec () { echo -n "\\e[40;37m" }...
pataluc

1
@pataluc: ขอโทษตอนนี้ฉันได้รับจุด เพื่อสีบรรทัดคำสั่งเพียงใช้zle_highlight=(default:fg=cyan)กับรุ่น zsh ล่าสุด Zsh ยังเสนอการระบายสีแบบไดนามิกเช่นfish; ดูส่วนการไฮไลต์ตัวอักษรใน man zshzle
mpy

คำตอบ:


5

ไม่ได้จริงๆ สีของเอาต์พุตของโปรแกรมที่กำหนดถูกควบคุมโดยคำสั่งไม่ใช่โดยเทอร์มินัล

ที่กล่าวว่าสมมติว่าเทอร์มินัลของคุณเข้าใจรหัสการหลบหนี ANSI สำหรับสี (ส่วนใหญ่ทำ) คุณสามารถใช้รหัสการหลบหนีเพื่อตั้งค่าสีพรอมต์ที่คุณต้องการที่จุดเริ่มต้นของพรอมต์และสีเอาต์พุตที่ต้องการในตอนท้าย สิ่งนี้จะส่งผลให้บรรทัดคำสั่งของคุณมีสีที่คุณกำหนดไว้สำหรับเอาต์พุต แต่ก็อาจจะใกล้เคียงที่สุดเท่าที่คุณจะไปถึงสิ่งที่คุณกำลังมองหา ตัวอย่างเช่นต่อไปนี้:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

จะให้พรอมต์ที่มีลักษณะดังนี้:

user@host:wd $ _

ด้วย 'user' และ 'host' เป็นสีม่วง 'wd' (cwd ของคุณ) เป็นสีน้ำตาล (สีเหลืองเข้ม) และทุกอย่างหลังจาก '$' ในสิ่งที่เทอร์มินัลของคุณใช้สำหรับแสงสีฟ้า (ค่าเริ่มต้น xterm จะแสดงผลเป็น cyan; gnome-terminal ดูเหมือนว่าจะเป็นค่าเริ่มต้นสำหรับเฉดสีน้ำเงินของคอร์นฟลาวเวอร์ที่ค่อนข้างดี)

รหัสสีจริงตามที่ระบุไว้ในรูปแบบที่จำเป็นสำหรับ bash คือเช่น\[\033[00;35m\]ที่00;35มีการกำหนดสีจริง การ00เปลี่ยนแปลงชั้นนำไม่ค่อยมี แต่สามารถผลิต IIRC ตัวหนา (01), ขีดเส้นใต้ (??) และย้อนกลับวิดีโอ (??) ผลกระทบในขณะที่ '35' ต่อท้ายเป็นสีจริงซึ่งในกรณีนี้เป็นสีม่วง

เป็นการยากที่จะหารายการรหัสสี ANSI ที่น่าแปลกใจ แต่สีพื้นหน้าเริ่มต้นที่ 30 ถึง 37 และพื้นหลังจาก 40 ถึง 47 ดังต่อไปนี้:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

โปรดจำไว้ว่าเนื่องจากคุณกำลังตั้งค่าสีเริ่มต้นสำหรับทุกสิ่งที่เป็นไปตามพรอมต์ของคุณโปรแกรมที่คุณเรียกใช้ซึ่งไม่ได้ตั้งค่าสีของตนเองผ่านทางรหัสหลีกเลี่ยงจะใช้สีนั้น - ตัวอย่างเช่นหากคุณเรียกใช้ เพจเจอร์คุณน่าจะเห็นผลลัพธ์ในสีเดียวกับที่คุณตั้งไว้สำหรับคำสั่งอื่น ในขณะที่คำสั่งที่ไม่ตั้งค่าสีของตัวเองผ่านทางรหัสหนีจะไม่สนใจความพยายามของคุณทั้งหมด


1
แทนที่จะพบรหัสหลบหนีฉันพบว่าการใช้tputนั้นสามารถอ่านได้มากขึ้นสำหรับการกำหนดสี ยกตัวอย่างเช่นพรอมต์ของฉัน (ในทุบตี) เป็นexport PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "ที่ outputs เวลาแล้วชื่อผู้ใช้ในสีหนึ่ง@ในอีกและชื่อโฮสต์ในสาม (สีแดง, สีขาว, สีฟ้าและในขณะนี้) แล้วพิมพ์ PWD $ และ มันง่ายมากที่จะเห็นว่าเส้นพรอมต์นั้นเมื่อเลื่อนดูประวัติ
MattDMo

ดีเลิศ ... นั่นคือทั้งหมดที่ฉันต้องการ ขอบคุณคุณสามารถบอกฉันว่าค่าที่จะเปลี่ยนถ้าฉันต้องการที่จะเปลี่ยนสี?
raj

และมีวิธีที่จะทำให้คนสุดท้ายเหมือนกันกับสีที่มีมาก่อนหรือไม่
raj

และทำไมไม่ถาวรการเปลี่ยนแปลงทุกครั้งที่ฉันเข้าสู่ระบบในฉันมีสีอีกครั้ง
raj

1
การเปลี่ยนแปลงไม่ได้เป็นการถาวรเว้นแต่คุณจะเพิ่มลงในไฟล์เริ่มต้นของเชลล์ซึ่งสำหรับ bash คือ~/.bashrc; ค้นหาบรรทัดที่ตั้งค่า PS1 ซึ่งเป็นสตริงพรอมต์ของคุณและแก้ไขตามที่อธิบายไว้ในคำตอบ สิ่งที่จะเปลี่ยนแปลงขึ้นอยู่กับวิธีตั้งค่าสตริงพรอมต์ของคุณ แต่รายละเอียดส่วนใหญ่อยู่ในคำตอบของฉันและส่วนที่เหลือสามารถพบได้โดยทำ Googling เล็กน้อย ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย "มีวิธีที่จะทำให้คนสุดท้ายเหมือนกันกับสีที่มีมาก่อนหรือไม่"
แอรอนมิลเลอร์


3

ใช่ฉันใช้งานได้กับ bash, บน linux และ mac OS เป็นอย่างน้อย

ขั้นแรกให้ตั้งค่าตัวแปรแอตทริบิวต์บางส่วนและแจ้งให้ PS1 ออกจากชุดเทอร์มินัลด้วยแอตทริบิวต์บรรทัดคำสั่งที่ต้องการตัวอย่างเช่น

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

จากนั้นใช้ bash DEBUG trap ซึ่งได้รับการดำเนินการก่อนทุกคำสั่งเพื่อเปลี่ยนคุณสมบัติข้อความสำหรับคำสั่งเอาท์พุท:

trap 'echo -ne "${none}"' DEBUG

1

ทางเลือกอื่น (ตามคำสั่งพื้นฐาน) เป็น grc - colorizer ทั่วไป ใช้เวลาเล็กน้อยในการตั้งค่านิพจน์ทั่วไปที่ใช้เพื่อทำให้สีต่าง ๆ ฉันพบเกี่ยวกับที่นี่:

https://unix.stackexchange.com/questions/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

และที่นี่:

https://unix.stackexchange.com/questions/26313/colored-find-output

ฉันไม่ได้แฟลชกับ regexes ดังนั้นฉันจึงไม่ได้ทำงานกับคำสั่งเหล่านี้มาก


ฉันใช้สิ่งนี้กับสคริปต์บันทึกหางของฉันทั้งหมด มหัศจรรย์
stefgosselin

1

โยนสิ่งเหล่านี้ลงในไฟล์. bashrc ของคุณจากนั้นให้ไฟล์นั้นหลังจากบันทึก

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

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

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

ฉันมักจะใช้สิ่งเหล่านี้กับบุคคลechoและ / หรือprintfคำสั่ง แต่คุณสามารถใช้พวกเขาเพื่อ colorize คำสั่งอื่น ๆ เช่นpingคำสั่ง เพิ่มรายการต่อไปนี้.bashrcเพื่อรับผลกระทบ จากนั้นแหล่ง.bashrcไฟล์ของคุณและเรียกใช้cpingคำสั่งเพื่อใช้pingกับข้อความสีม่วง คุณสามารถตั้งค่าฟังก์ชั่นแต่ละคำสั่งให้ใช้สีใดก็ได้ที่เทอร์มินัลสนับสนุน

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

จากนั้นลอง:

user@linux:~# cping superuser.com

ผลลัพธ์ของคุณcpingจะเป็นสีม่วง หากคุณต้องการใช้หลายสีในผลลัพธ์เดียวกันคุณสามารถเพิ่มสีด้วยวิธีที่ไม่ซ้ำกัน วิธีที่คุณทำนั้นขึ้นอยู่กับคุณอย่างสมบูรณ์ ตัวอย่างเช่น:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

คุณควรดูคำสั่ง hl บน git hub:
github: git clone http://github.com/mbornet-hl/hl
และบน:
http://www.flashnux.com/notes/page_000022_US.html
hl เป็นคำสั่ง linux ที่เขียนด้วยภาษา C ออกแบบมาโดยเฉพาะเพื่อระบายสีไฟล์ข้อความหรือเอาต์พุตของคำสั่ง คุณสามารถใช้สีได้มากถึง 42 สีพร้อมกันและใช้ไฟล์กำหนดค่าเพื่อทำให้บรรทัดคำสั่งง่ายขึ้น คุณสามารถ colorize ผลลัพธ์ของทุกคำสั่งที่สามารถ piped ไปยังอีกอัน และถ้าคุณรู้ว่านิพจน์ทั่วไปคืออะไรมันจะง่ายสำหรับคุณที่จะใช้ คุณสามารถใช้ man page เพื่อทำความเข้าใจวิธีใช้มัน

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