Màu khác nhau cho lệnh và đầu ra


13

Tôi đã tự hỏi nếu có thể thay đổi màu của đầu ra của một lệnh trong linux thành một màu khác với màu của dòng lệnh mà tôi nhập vào. Thật đơn giản và khó tìm thấy nơi đầu ra bắt đầu. giống,

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

Cảm ơn


2
có thể sử dụng premd_fifts, bạn có thể thay đổi màu nhắc và đặt lại trước preexec_fifts hoặc một cái gì đó tương tự. (trong zsh, tôi không biết có tương đương với các loại đạn khác không)
pataluc

tôi chỉ thử đề xuất của mình nhưng tôi không nhận được lệnh màu ... :(
pataluc

1
@pataluc: Tôi đã thành công với preexec () { echo -n "\\e[40;34m" }; các precmdchức năng là IMHO không cần thiết, có vẻ như resets zsh màu sắc riêng của mình trước khi hiển thị dấu nhắc. Nhưng điều đó chỉ hiệu quả đối với những lệnh không làm thay đổi màu sắc (ví dụ nổi bật là ls) như Aaron đã chỉ ra. Với cat, bccác lệnh shell dựng sẵn, v.v (thậm chí alpine) điều này hoạt động tốt.
mpy

@mpy tôi cũng đã thành công, với tất cả các lệnh, giả sử raj muốn tô màu lệnh và không kết quả, tôi đã thêm vào "\\e[40;34m"cuối PROMPTvar của mình và đặt nó trở lại màu trắng với preexec () { echo -n "\\e[40;37m" }...
pataluc

1
@pataluc: Xin lỗi, bây giờ tôi nhận được điểm. Để tô màu dòng lệnh chỉ cần sử dụng zle_highlight=(default:fg=cyan)với phiên bản zsh gần đây. Zsh cũng cung cấp màu sắc năng động, như fish; xem phần CHARACTER CAO CẤP trong man zshzle.
mpy

Câu trả lời:


5

Không thực sự; màu của đầu ra của chương trình đã cho được điều khiển bởi lệnh chứ không phải bởi thiết bị đầu cuối.

Điều đó nói rằng, giả sử thiết bị đầu cuối của bạn hiểu mã thoát ANSI cho màu sắc (hầu hết làm), bạn có thể sử dụng mã thoát để đặt màu nhắc nhở mong muốn ở đầu dấu nhắc và màu đầu ra mong muốn của bạn ở cuối; điều này sẽ dẫn đến các dòng lệnh của bạn cũng có màu bất kỳ mà bạn đặt cho đầu ra, nhưng điều đó có thể gần đến mức bạn sẽ tìm thấy những gì bạn đang tìm kiếm. Ví dụ: như sau:

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

sẽ cung cấp cho bạn một dấu nhắc giống như:

user@host:wd $ _

với 'người dùng' và 'máy chủ' có màu tím, 'wd' (cwd của bạn) có màu nâu (vàng đậm) và mọi thứ sau '$' trong bất kỳ thiết bị đầu cuối nào của bạn sử dụng cho màu xanh nhạt. (Một xterm mặc định sẽ hiển thị điều này bằng màu lục lam; gnome-terminal dường như mặc định có màu xanh hoa ngô khá đẹp.)

Mã màu thực tế, như được chỉ định trong định dạng cần thiết cho bash, ví dụ \[\033[00;35m\], ở đâu 00;35là đặc tả màu thực tế; hàng đầu 00hiếm khi thay đổi, nhưng có thể tạo hiệu ứng đậm nét IIRC (01), gạch chân (??) và đảo ngược video (??), trong khi dấu '35' là màu thực tế, trong trường hợp này là màu tím.

Thật khó để tìm thấy một danh sách đầy đủ các mã màu ANSI, nhưng các màu nền trước chạy từ 30 đến 37 và các màu nền từ 40 đến 47, như sau:

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

Hãy nhớ rằng, vì bạn đang đặt màu mặc định cho mọi thứ theo dấu nhắc của mình, các chương trình bạn chạy không đặt màu của riêng chúng thông qua mã thoát sẽ lấy màu đó - ví dụ: nếu bạn chạy máy nhắn tin, bạn có thể thấy đầu ra của nó có cùng màu bạn đã đặt cho các lệnh khác. Trong khi đó, các lệnh tự đặt màu của chúng thông qua mã thoát sẽ bỏ qua hoàn toàn nỗ lực của bạn.


1
Thay vì mã thoát, tôi đã thấy rằng việc sử dụng tputdễ đọc hơn nhiều để tô màu. Ví dụ: lời nhắc của tôi (trong bash) là export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "xuất ra thời gian, sau đó tên người dùng bằng một màu, trong một màu @khác và tên máy chủ ở một phần ba (đỏ, trắng và xanh lam tại thời điểm này), sau đó in PWD và $ . Rất dễ dàng để nhìn thấy trong nháy mắt nơi các dòng nhắc nhở khi cuộn qua lịch sử.
MattDMo

bạn thật tuyệt vời ... đó là tất cả những gì tôi muốn Cảm ơn bạn có thể cho tôi biết những giá trị để thay đổi nếu tôi muốn thay đổi màu sắc?
raj

và có cách nào để giữ cái cuối cùng giống như màu trước đây không?
raj

và tại sao không phải là thay đổi vĩnh viễn, mỗi lần tôi đăng nhập, tôi phải tô màu lại
raj

1
Thay đổi không phải là vĩnh viễn trừ khi bạn thêm nó vào tệp khởi tạo của shell, đối với bash là ~/.bashrc; tìm dòng nơi nó đặt PS1, đây là chuỗi nhắc của bạn và sửa đổi nó như được mô tả trong câu trả lời. Điều gì cần thay đổi tùy thuộc vào cách thiết lập chuỗi nhắc của bạn, nhưng hầu hết các chi tiết nổi bật đều nằm trong câu trả lời của tôi và phần còn lại có thể được tìm thấy bằng cách thực hiện một chút Googling. Tôi không chắc ý của bạn là gì "có cách nào để giữ cái cuối cùng giống với màu trước đây không?"
Aaron Miller

7

Bạn có thể chuyển đầu ra cho một chương trình tô màu. Ví dụ: có các chương trình như pycolor:

pycolor module.py

Để xây dựng của riêng bạn:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

Thêm về đầu ra màu sắc.


3

Có, tôi đã làm việc này cho bash, trên linux và mac OS.

Đầu tiên, đặt một số biến thuộc tính và dấu nhắc PS1 để thiết lập đầu cuối với các thuộc tính dòng lệnh mong muốn, ví dụ:

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

Sau đó, sử dụng bẫy DEBUG bash, được thực thi ngay trước mỗi lệnh, để thay đổi các thuộc tính văn bản cho đầu ra lệnh:

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

1

Một cách khác (trên một lệnh theo cơ sở lệnh) là grc - colorizer chung. Phải mất một chút công việc để thiết lập các biểu thức thông thường mà nó sử dụng để tô màu mọi thứ. Tôi đã tìm hiểu về nó ở đây:

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

và đây:

/unix/26313/colored-find-output

Tôi không phải là một flash với regexes, vì vậy tôi đã không làm việc với các lệnh này nhiều.


Tôi sử dụng điều này với tất cả các kịch bản đuôi của tôi. Kỳ diệu.
stefgosselin

1

Ném chúng vào tệp .bashrc của bạn và sau đó nguồn tệp sau khi lưu.

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

Khi điều này được thực hiện, bạn có thể sử dụng bất kỳ thứ nào trong số này trong thiết bị đầu cuối của mình vĩnh viễn hoặc cho đến khi bạn nhận xét các biến hoặc xóa chúng hoàn toàn. Bạn có thể sử dụng chúng trong các tập lệnh trên máy của bạn hoặc thay thế lệnh hoặc bất cứ điều gì. Dưới đây là một ví dụ sau về cách tôi sử dụng chúng cá nhân:

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

Tôi thường sử dụng chúng với các lệnh riêng lẻ echovà / hoặc printfnhưng bạn có thể sử dụng chúng để tô màu các lệnh khác cũng như pinglệnh. Thêm vào sau đây .bashrcđể có được các hiệu ứng. Sau đó, nguồn .bashrctệp của bạn và chạy cpinglệnh để sử dụng pingvới văn bản màu tím. Bạn có thể đặt từng chức năng lệnh để sử dụng bất kỳ màu nào mà thiết bị đầu cuối của bạn hỗ trợ.

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

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

alias cping='colored_ping'

Vậy hãy thử đi:

user@linux:~# cping superuser.com

Đầu ra của bạn cpingsẽ có màu tím. Nếu bạn muốn sử dụng nhiều màu sắc trong cùng một đầu ra, bạn có thể thêm chúng vào bằng những cách độc đáo. Làm thế nào bạn làm điều đó là hoàn toàn tùy thuộc vào bạn. Ví dụ:

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

0

Bạn nên xem lệnh hl có sẵn trên git hub:
github: git clone http://github.com/mbornet-hl/hl
và trên:
http://www.flashnux.com/notes/page_000022_US.html
hl là một lệnh linux được viết bằng C, đặc biệt được thiết kế để tô màu tệp văn bản hoặc đầu ra của lệnh. Bạn có thể sử dụng đồng thời tối đa 42 màu và sử dụng tệp cấu hình để đơn giản hóa các dòng lệnh. Bạn có thể tô màu đầu ra của mỗi lệnh có thể được chuyển sang lệnh khác. Và nếu bạn biết biểu thức chính quy là gì, nó sẽ rất dễ sử dụng. Bạn có thể sử dụng trang man để hiểu cách sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.