टर्मिनल कमांड प्रॉम्प्ट में उपयोगकर्ता, होस्ट, निर्देशिका जानकारी के लिए रंग बदलना


104

क्या कमांड प्रॉम्प्ट में रंगों को बदलना संभव है user@computer, साथ ही साथ वर्तमान निर्देशिका और प्रॉम्प्ट डिस्प्ले के कमांड भागों में?

मैंने पहले से ही OSX उपयोगकर्ताओं द्वारा ऐसा कुछ देखा है, लेकिन मुझे नहीं पता कि गनोम टर्मिनल में एक ही काम कैसे किया जाए (मैं केवल अग्रभूमि और पृष्ठभूमि रंग बदल सकता हूं)।

यह बहुत उपयोगी होगा जब, उदाहरण के लिए, उन प्रोग्रामों को संकलित करने की कोशिश की जा रही है जिनमें त्रुटियां हैं, लंबे समय से, बिना संदेश वाले संदेशों को यह भेद करना मुश्किल है कि कौन सी लाइनें कमांड हैं और जो आउटपुट हैं।

ऑक्स टर्मिनल में रंग


1
आप bashसेटिंग्स (या अपने पसंदीदा शेल के लिए सेटिंग्स) की तलाश कर रहे हैं, न कि गनोम टर्मिनल की।
स्कॉट सेवेंस

जवाबों:


135

आप फ़ाइल को संपादित करने वाली सेटिंग्स को संपादित कर सकते हैं ~/.bashrc:।

  1. फ़ाइल खोलें gedit ~/.bashrc:।

  2. लाइन के साथ #force_color_prompt=yesऔर असावधानी (हटाएं #) देखें।

  3. नीचे दी गई लाइन if [ "$color_prompt" = yes ]; thenकी तरह दिखना चाहिए:

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

    उस हिस्से पर ध्यान दें, जो \u@\h"उपयोगकर्ता @ होस्ट" कह रहा है और इससे पहले की संख्या \[\033[01;32m\]रंग इंगित करती है। यह आपको बदलना है। उदाहरण के लिए, उपयोगकर्ता को बैंगनी, "@" को काले और हरे रंग में होस्ट करने की अनुमति देता है। लाइन को संपादित करें ताकि ऐसा लगे:

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

नतीजा:
यहाँ छवि विवरण दर्ज करें

रंग संख्याएँ हैं:

ब्लैक ०; ३० डार्क ग्रे १; ३०
नीला ०; ३४ लाइट ब्लू १; ३४
ग्रीन ०; ३२ लाइट ग्रीन १; ३२
सियान 0; 36 लाइट सियान 1; 36
रेड 0; 31 लाइट रेड 1; 31;
बैंगनी ०; ३५ लाइट पर्पल १; ३५
भूरा 0; 33 पीला 1; 33
लाइट ग्रे 0; 37 व्हाइट 1; 37

संदर्भ: 1 , 2


मुझे खुशी है कि यह काम कर रहा है। स्वागत हे।
desgua

यह भी ध्यान देने योग्य है कि आपको इसे आज़माने Paletteके लिए टर्मिनल से Preferencesपहले रंग नहीं बदलना चाहिए , क्योंकि यह रंग कोड के साथ बहुत भ्रम पैदा करेगा।
रिफ़ाज़ नाहयान

लेकिन हम किसी विशेष रंग में दिखाने के लिए एक विशेष स्ट्रिंग कैसे बना सकते हैं? जैसे कहना है कि एक त्रुटि संदेश है जो एक विशिष्ट प्रारूप में मुद्रित होता है, जिसे मैं इसे लाल रंग में देखना चाहता हूं। या जीडीबी में, जब मुझे कोई संदेश दिखाई देता है जैसे - "चेतावनी: स्रोत फ़ाइल निष्पादन योग्य से अधिक हाल ही में है।", मैं चाहता हूं कि यह लाल रंग में प्रदर्शित हो। यह कैसे हासिल किया जा सकता है?
दर्शन एल

36

आप BashrcGenerator को आज़मा सकते हैं । यह अब तक का सबसे आसान तरीका है जैसे आप चाहते हैं। मैंने देखा है कि यहाँ परिभाषित रंग आपके स्वयं के सिस्टम से भिन्न हो सकते हैं, लेकिन यह एक छोटा मुद्दा है। उत्पन्न कोड के साथ आप खुद रंग बदल सकते हैं।

सर्वर उपयोगकर्ता:

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\]"

सर्वर रूट:

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\]"

और यदि आवश्यक हो तो आप विभिन्न प्रकार के सर्वर को प्रतिबिंबित करने के लिए होस्टनाम रंग बदल सकते हैं।

मैं अपने स्थानीय कंप्यूटर के लिए अलग प्रारूप का उपयोग करता हूं:

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\]"

मेरा पसंदीदा अब:

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$ "

इस अंतिम संकेत में एक अच्छा स्पर्श है। यह प्रॉम्प्ट के बाद एक नई लाइन जोड़ता है, और इससे पहले एक खाली नईलाइन। अब आप समस्या के बिना पूर्ण निर्देशिका पथ प्रदर्शित कर सकते हैं, और यह अधिक स्पष्ट करता है कि लंबे आउटपुट के मामले में एक नया कमांड कहां शुरू होता है।


5
PS1 जनरेटर: +1: डी
ऐशसेन

1
वास्तव में वास्तव में पिछले एक को पसंद किया, मैं चिंतित था क्योंकि उपयोगकर्ता नाम और पथ ने मुझे बहुत अधिक जगह ले ली, आखिरी विकल्प के साथ आप पूरी स्क्रीन प्राप्त कर सकते हैं
डैमियन राफेल लॅटेनेरियो

यह महान काम किया! हालांकि, मैं विशिष्ट मेजबानों के लिए यह कैसे कर सकता हूं? उदाहरण के लिए जब मैं एक उत्पादन सर्वर में ssh अर्थात एक विशिष्ट रंग योजना सेट करता हूं? क्या मुझे इसे "मैन्युअल रूप से" करना होगा, अगर -bashrc में ब्लॉक करें? या वहाँ एक और अधिक सुंदर तरीका है?
अकापुल्को

प्रत्येक होस्ट पर आप लॉगिन करते हैं, उस दूरस्थ उपयोगकर्ता के लिए एक व्यक्तिगत .bashrc फ़ाइल होती है, और इसे बदल सकते हैं। यदि आप रूट हो जाते हैं, तो इसकी अपनी सेटिंग होती है, जो रूट होने पर अन्य उपयोगकर्ताओं द्वारा देखी जाएगी।
SPRBRN

6

विवरण के लिए, यह विस्तृत HOWTO देखें

संक्षेप में, आप $ PS1 पर्यावरण चर का संपादन करके संकेत को बदल सकते हैं। यहाँ कहने के लिए बहुत कुछ है, कि मैं आपको केवल अपना संकेत दिखाऊँगा और अधिक जानकारी के लिए ऊपर दिए गए लिंक का संदर्भ दूंगा।

रंग-संबंधित भाग कार्य में हैं 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

रंगों के अलावा, मेरी प्रॉम्प्ट में कुछ अन्य विशेषताएं हैं, जैसे संक्षिप्त निर्देशिका नाम (फ़ंक्शन देखें bash_prompt_shortener), अंतिम कमांड के बाहर निकलने की स्थिति का स्वत: प्रदर्शन यदि नॉनजरो (फ़ंक्शन checkExitStatus), और सही कॉलम (फ़ंक्शन print_prompt_time) में समय का प्रदर्शन। ।


अपने कस्टम कार्यों को साझा करने के लिए धन्यवाद :) क्या यह केवल मेरे साथ है जब मैं बैकस्पेस दबाता हूं तो टाइमस्टैम्प गायब हो जाता है?
लुइज रॉड्रिगो

नहीं। मैं भी। कुछ बग हैं जिन्हें ठीक करने की कोशिश करने के लिए मैंने पर्याप्त न्याय नहीं किया है।
स्कॉट सेवेरेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.