Komut ve çıktı için farklı renk


13

Linux'taki bir komutun çıktısının rengini, yazdığım komut satırından farklı bir renge değiştirmenin mümkün olup olmadığını merak ediyordum. Çıktının nerede başladığını bulmak monoton ve zor. sevmek,

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

Teşekkürler


2
belki precmd_functions kullanarak bilgi istemi rengini değiştirmek ve preexec_functions ya da onun gibi bir şey önce geri ayarlayabilirsiniz. (zsh
cinsinden

Ben sadece benim öneri denedim ama komutu renkli
almıyorum

1
@pataluc: Başardım preexec () { echo -n "\\e[40;34m" }; precmdfonksiyon IMHO gerekli değildir o zsh sıfırlar istemi görüntülemeden önce rengi kendisi görünüyor. Ancak bu sadece lsAaron'un işaret ettiği gibi rengin kendisini değiştirmeyecek komutlar için geçerlidir (önemli örnek ). İle cat, bcvb kabuk komutları, yerleşik (hatta alpine) bu cezayı çalışır.
mpy

@mpy ben de başarılı oldu, tüm komutları ile, raj komutu renklendirmek istiyor ve sonucu değil, "\\e[40;34m"PROMPTpreexec () { echo -n "\\e[40;37m" }
varsayalım

1
@pataluc: Üzgünüm, şimdi anladım. Komut satırını renklendirmek için sadece zle_highlight=(default:fg=cyan)yeni bir zsh sürümüyle kullanın. Zsh ayrıca fish; man zshzle'daki KARAKTER Vurgulama bölümüne bakın.
mpy

Yanıtlar:


5

Pek sayılmaz; belirli bir programın çıktısının rengi terminal tarafından değil, komut tarafından kontrol edilir.

Bununla birlikte, terminalinizin renk için ANSI kaçış kodlarını anladığını varsayarsak (çoğu), istemin başında istediğiniz istem rengini ve sonunda istediğiniz çıkış rengini ayarlamak için kaçış kodlarını kullanabilirsiniz; bu, komut satırlarınızın çıktı için belirlediğiniz renkte olmasına neden olur, ancak bu muhtemelen aradığınız şeye ulaşacağınız kadar yakındır. Örneğin, aşağıdakiler:

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

size şöyle bir istem verecektir:

user@host:wd $ _

'kullanıcı' ve 'ana bilgisayar' mor renkte, 'wd' (cwd) kahverengi renkte (koyu sarı) ve terminalin açık mavi için kullandığı her şeyde '$' işaretinden sonraki her şey. (Varsayılan bir xterm bunu camgöbeği haline getirecektir; gnome terminali varsayılan olarak peygamber çiçeği mavisinin oldukça güzel bir tonuna benziyor.)

Bash için gerekli formatta belirtildiği gibi gerçek renk kodu, örneğin, gerçek renk spesifikasyonunun \[\033[00;35m\]nerede 00;35olduğu; önde gelen 00nadiren değişir, ancak IIRC kalın (01), altı çizili (??) ve ters video (??) efektleri üretebilirken, izleyen '35', bu durumda mor olan gerçek renktir.

ANSI renk kodlarının iyi bir listesini bulmak şaşırtıcı derecede zordur, ancak ön plan renkleri 30 ila 37 arasında ve arka plan renkleri 40 ila 47 arasındadır:

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

İsteminizi izleyen her şey için varsayılan bir renk ayarladığınızdan, kaçış kodları ile kendi renklerini ayarlamayan programların bu rengi alacağını unutmayın - örneğin, çağrı cihazı, muhtemelen çıktısını diğer komutlar için ayarladığınız renkte görürsünüz. Bu arada, komutlar do kaçış kodları üzerinden kendi renklerini ayarlamak tamamen çabalarınızı göz ardı eder.


1
Kaçış kodları yerine, tputrenklendirme için kullanımın çok daha okunabilir olduğunu gördüm . Örneğin, istemim (bash'ta) export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "zamanı, daha sonra bir renkte, @başka bir renkte kullanıcı adını ve üçte birinde (şu anda kırmızı, beyaz ve mavi) ana bilgisayar adını veren, ardından PWD'yi yazdırır $ . Geçmişte geriye doğru ilerlerken bilgi satırlarının nerede olduğunu bir bakışta görmek çok kolay.
MattDMo

ur harika ... şimdiye kadar istediğim bu. Teşekkürler Bana renkleri değiştirmek istersem hangi değerlerin değişeceğini söyleyebilir misiniz?
raj

ve sonuncuyu rengin öncekiyle aynı tutmanın bir yolu var mı?
raj

ve neden değişiklik geçirmiyor, her giriş yaptığımda tekrar renklendirmem gerekiyor
raj

1
Değişiklik, kabuğunuzun başlangıç ​​dosyasına eklenmedikçe kalıcı değildir ~/.bashrc; istem dizeniz olan PS1'i ayarladığı satırı bulun ve yanıtta açıklandığı gibi değiştirin. Ne değiştirilecek istemi dizginizin nasıl ayarlandığına bağlıdır, ancak göze çarpan ayrıntıların çoğu cevabımdadır ve geri kalanı biraz Google ile yapılabilir. Ne demek istediğinden emin değilim "sonuncuyu rengin eskisi gibi tutmanın bir yolu var mı?"
Aaron Miller

7

Çıktıyı renklendiren bir programa geçirebilirsiniz. Örneğin, aşağıdaki gibi programlar vardır pycolor:

pycolor module.py

Kendinizinkini oluşturmak için:

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

Renk çıktısı hakkında daha fazla bilgi.


3

Evet, bu en azından bash, linux ve mac OS'de çalışıyorum.

İlk olarak, bazı öznitelik değişkenlerini ayarlayın ve PS1, terminali istenen komut satırı öznitelikleriyle ayarlanmış olarak bırakmak isteyip istemediğinizi sorar, örneğin:

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

Ardından, komut çıktısının metin özelliklerini değiştirmek için her komuttan hemen önce yürütülen bash DEBUG tuzağını kullanın:

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

1

Başka bir alternatif (komuta göre komut bazında) grc - jenerik renklendirici'dir. Bir şeyleri renklendirmek için kullandığı normal ifadeleri ayarlamak biraz çaba gerektirir. Burada öğrendim:

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

ve burada:

/unix/26313/colored-find-output

Normal ifadelere sahip bir flaş değilim, bu yüzden bu komutlarla fazla çalışmadım.


Bunu tüm kuyruk günlüğü komut dosyalarımla kullanıyorum. Harikulade.
stefgosselin

1

Bunları .bashrc dosyanıza atın ve kaydettikten sonra dosyayı kaynaklayın.

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

Bu yapıldıktan sonra, bunlardan herhangi birini terminalinizde kalıcı olarak veya değişkenleri yorumlayana veya tamamen silene kadar kullanabilirsiniz. Bunları makinenizdeki komut dosyalarında veya komut değiştirme veya başka bir yöntemle kullanabilirsiniz. İşte bunları kişisel olarak nasıl kullandığımın bir örneği:

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

Bunları genellikle bireysel echove / veya printfkomutlarla kullanıyorum, ancak komut gibi diğer komutları renklendirmek için de kullanabilirsiniz ping. .bashrcEfektleri almak için aşağıdakileri ekleyin . Sonra .bashrcdosyanızı kaynak ve mor metin ile cpingkullanmak için komutu çalıştırın ping. Her komut işlevini terminalinizin desteklediği herhangi bir rengi kullanacak şekilde ayarlayabilirsiniz.

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

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

alias cping='colored_ping'

O zaman dene:

user@linux:~# cping superuser.com

İçin çıktınız cpingmor olacaktır. Aynı çıktıda birden fazla renk kullanmak istiyorsanız, bunları benzersiz yollarla ekleyebilirsiniz. Bunu nasıl yapacağınız tamamen size kalmış. Örneğin:

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

0

Git hub'da bulunan hl komutuna göz atmalısınız:
github: git clone http://github.com/mbornet-hl/hl
ve on:
http://www.flashnux.com/notes/page_000022_US.html
hl özellikle bir metin dosyasını veya bir komutun çıktısını renklendirmek için tasarlanmış C dilinde yazılmış bir linux komutudur. Aynı anda 42 renge kadar kullanabilir ve komut satırlarını basitleştirmek için bir yapılandırma dosyası kullanabilirsiniz. Pipete alınabilen her komutun çıktısını renklendirebilirsiniz. Ve düzenli ifadelerin ne olduğunu biliyorsanız, kullanmanız çok kolay olacaktır. Nasıl kullanılacağını anlamak için man sayfasını kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.