Terminal komut isteminde kullanıcı, ana bilgisayar, dizin bilgileri için renkleri değiştirme


104

Komut istemindeki renkleri user@computerve komut istemi ekranının geçerli dizin ve komut bölümlerini değiştirmek mümkün müdür?

OSX kullanıcıları tarafından zaten böyle bir şey gördüm, fakat aynı şeyi GNOME terminalinde nasıl yapacağımı bilmiyorum (sadece ön plan ve arka plan renklerini değiştirebilirim).

Örneğin, hatalı programların derlenmeye çalışılması çok yararlı olacaktır, çünkü uzun zamandır biçimlendirilmemiş mesajlar hangi satırların komut olduğunu ve hangi komutun çıktı olduğunu ayırt etmeyi zorlaştırır.

Osx terminalinde renkler


1
bashGnome Terminali değil, ayarları (veya tercih ettiğiniz kabuk için ayarları) arıyorsunuz .
Scott Severance

Yanıtlar:


135

Sen dosyasını düzenleyerek ayarlarını düzenleyebilirsiniz: ~/.bashrc.

  1. Dosyasını açın: gedit ~/.bashrc.

  2. Satırı arayın #force_color_prompt=yesve uncomment (silin #).

  3. Aşağıdaki if [ "$color_prompt" = yes ]; thengibi görünmesi gereken satırı arayın :

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

    \u@\h"User @ host" yazdığı bölüme \[\033[01;32m\]ve rengi göstermeden önceki sayıya dikkat edin. Değiştirmen gereken şey bu. Örneğin, kullanıcının morla, "@" nin siyahla ve ana bilgisayarın yeşille değiştirilmesini sağlar. Çizgiyi, şöyle görünecek şekilde düzenleyin:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u\[\033[01;30m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Sonuç:
görüntü tanımını buraya girin

Renk sayıları:

Siyah 0; 30 Koyu Gri 1; 30
Mavi 0; 34 Açık Mavi 1; 34
Yeşil 0; 32 Açık Yeşil 1; 32
Mavi 0; 36 Açık Mavi 1; 36
Kırmızı 0; 31 Açık Kırmızı 1; 31
Mor 0; 35 Açık Mor 1; 35
Kahverengi 0; 33 Sarı 1; 33
Açık Gri 0; 37 Beyaz 1; 37

Kaynaklar: 1 , 2 .


Çalışmasına sevindim. Hoşgeldiniz.
desgua

Bunu denemeden önce PaletteTerminal'in rengini değiştirmemelisiniz, Preferencesçünkü renk kodları ile çok fazla kargaşaya neden olacaktır.
Rifaz Nahiyan

Fakat belirli bir renkte belli bir diziyi nasıl gösterebiliriz? Mesela, belirli bir formatta basılan ve onu kırmızı renkte görmek istediğim bir hata mesajı var. VEYA GDB'de, - "uyarı: Kaynak dosya çalıştırılabilir dosyadan daha yeni" gibi bir mesaj gördüğümde, bunun kırmızı renkte görüntülenmesini istiyorum. Bu nasıl başarılabilir?
Darshan L

36

BashrcGenerator'ü deneyebilirsiniz . İstediğiniz gibi bir bilgi istemi almanın en kolay yolu budur. Burada tanımlanan renklerin kendi sisteminizden farklı olabileceğini fark ettim, ancak bu küçük bir sorun. Oluşturulan kod ile renkleri kendiniz değiştirebilirsiniz.

Sunucu kullanıcısı:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Sunucu kökü:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;31m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Ve gerekirse, farklı sunucu türlerini yansıtacak şekilde ana bilgisayar adı rengini değiştirebilirsiniz.

Yerel bilgisayarım için farklı formatlar kullanıyorum:

export PS1="\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] > \[\e[0m\]"

Şimdi favorim:

export PS1="\n\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] \[\e[0m\]\n$ "

Bu son istemin hoş bir dokunuşu var. Bilgi isteminden sonra yeni bir satır eklenir ve daha önce boş bir yeni satır ekler. Artık tüm dizin yolunu sorunsuz görüntüleyebilirsiniz ve uzun çıktı durumunda yeni bir komutun nereden başladığını daha açık bir şekilde gösterir.


5
PS1 jeneratörü: +1: D
anishsane

1
Sonuncuyu gerçekten çok sevdim, endişelendim çünkü kullanıcı adı ve yol bana çok fazla yer
kapladı

Bu harika çalıştı! ancak bunu belirli ana bilgisayarlar için nasıl yapabilirim? örneğin bir üretim sunucusuna ssh gönderdiğimde belirli bir renk şeması hazırlar mı? .bashrc içindeki if-fi blokları ile "elle" yapmak zorunda mıyım? ya da daha zarif bir yolu var mı?
Acapulco

Oturum açtığınız her ana bilgisayarda, o uzak kullanıcı için kişisel bir .bashrc dosyasına sahip olun ve dosyayı değiştirebilirsiniz. Kök olursanız, kendi ayarlarına sahip olur; bu, diğer kullanıcılar tarafından kökse de görülür.
SPRBRN

6

Ayrıntılar için bu ayrıntılı NASIL'a bakınız .

Kısacası, $ PS1 ortam değişkenini düzenleyerek istemi değiştirebilirsiniz. Burada söylenecek çok şey var, size sadece isteğimi göstereceğim ve daha fazla ayrıntı için yukarıdaki bağlantıya yönlendireceğim.

Renk ile ilgili parçalar fonksiyondadır setPrompt:

# This function from: https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Wolfman.27s
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff          -> ~/stuff               if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_prompt_shortener() {
    # How many characters of the $PWD should be kept
    local pwdmaxlen=25
    # Indicate that there has been dir truncation
    local trunc_symbol=".."
    local dir=${PWD##*/}
    pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
    NEW_PWD=${PWD/#$HOME/\~}
    local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
    if [ ${pwdoffset} -gt "0" ]
    then
        NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
        NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
    fi
}


function setPrompt {
  COLOR1="\[\033[1;33m\]"     #First color
  COLOR2="\[\033[0;33m\]"     #Second color
  NO_COLOR="\[\033[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[\033]0;\h - \w\007\]"
      ;;
    *)
      TITLEBAR=""
      ;;
  esac

  local dash_open="${COLOR1}-${COLOR2}-"
  local dash_close="${COLOR2}-${COLOR1}-"
  local spacer="${COLOR2}-"
  local jobs_and_history="${COLOR2}(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})"
  local user_host="${COLOR2}(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})"
  local host="${COLOR2}(${COLOR1}\H${COLOR2})"
  local root_or_not="${COLOR2}(${COLOR1}\\\$${COLOR2})"
  local cwd="${COLOR2}(${COLOR1}\w${COLOR2})"
  #PS1="${TITLEBAR}${COLOR1}-${COLOR2}-(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})-(${COLOR1}\w${COLOR2})-${COLOR1}-\n-${COLOR2}-(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})-(${COLOR1}\\\$${COLOR2})-${COLOR1}- ${NO_COLOR}"
  #PS1="${TITLEBAR}${dash_open}${cwd}${spacer}${root_or_not}${dash_close}\n${dash_open}${jobs_and_history}${spacer}${host}${dash_close}${NO_COLOR} "
  #PS2="${COLOR2}--${COLOR1}- ${NO_COLOR}"
  PS1="${TITLEBAR}${COLOR1}"'${NEW_PWD}'"${COLOR2}:\$${NO_COLOR} "
  PS2="$spacer$dash_close$NO_COLOR "
}

bash_prompt_shortener
setPrompt
unset setPrompt

#Determine and display the exit Status of the last command, if non-zero.
function checkExitStatus() {
  local status="$?"
  local signal=""
  local COLOR1="\033[0;0;33m"     #First color
  local COLOR2="\033[0;0;36m"     #Second color
  local NO_COLOR="\033[0m"        #Transparent - don't change

  if [ ${status} -ne 0 -a ${status} != 128 ]; then
    # If process exited by a signal, determine name of signal.
    if [ ${status} -gt 128 ]; then
      signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)"
      if [ "$signal" ]; then
        signal="$signal"
      fi
    fi
    echo -e "${COLOR1}[Exit ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2
    #echo -ne "${COLOR1}[Exit ${COLOR2}${status}${COLOR1} ${COLOR2}${signal}${COLOR1}]${NO_COLOR} " 1>&2
    fi
  return 0
}
print_prompt_time() {
    printf "%*s\r" $(tput cols) "$(date '+%T')"
}

promptCmd() {
    checkExitStatus
    print_prompt_time
}

PROMPT_COMMAND=promptCmd

Renklere ek olarak, istemimde kısaltılmış dizin adları (işleve bakın bash_prompt_shortener), sıfır olmadığında son komutun otomatik olarak gösterilmesi (sıfırsa (işlev checkExitStatus) ve saatin en sağdaki sütunlarda (işlev print_prompt_time) görüntülenmesi gibi) başka birkaç özelliği var. .


Özel işlevlerinizi paylaştığınız için teşekkür ederiz :) Geri düğmesine bastığımda yalnızca zaman damgası kayboluyor mu?
Luiz Rodrigo

Hayır! Ben de. Düzeltmeye çalışacağım kadar önemli yargılayamadığım bir hata var.
Scott Severance
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.