बैश प्रॉम्प्ट एरो अप पर गड़बड़ कर दिया


0

मैंने अपने प्रॉम्प्ट में कुछ बदलावों को रंग के माध्यम से इस्तेमाल किया है।

ऐसा लगता है कि जब मैं एक करने की कोशिश करता हूं arrow up कुछ कदम ऊपर उठने के बाद, संकेत को आधे में काट दिया जा रहा है, मेरा इससे क्या मतलब है:

इस से:

PROD mysuer@server1.domain.com:~$ vim .bashrc

इसके लिए:

PROD mysuer@servegit rebase origin/add_pool

ctrl + c सब कुछ वापस सामान्य में लाता है।

मुझे कुछ संकेत मिले हैं जो यह संकेत देते हैं कि ऐसा इस मुद्दे के कारण हो सकता है जिसके लिए लापता पलायन था [ हालाँकि मुझे यहाँ कोई समस्या नहीं दिख रही है:

मेरा कोड:

#red for prod, green for lab

COLOUR_RESET=$(tput sgr0)
COLOUR_GREEN=$(tput setaf 2)
COLOUR_BLUE=$(tput setaf 6)
COLOUR_YELLOW=$(tput setaf 3)
COLOUR_RED=$(tput setaf 1)
BOLD=$(tput bold)

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  COLOUR=$COLOUR_RED
  PROMPT_TEXT="PROD"
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  COLOUR=$COLOUR_BLUE
  PROMPT_TEXT="LAB"
fi


MYPROMPT="$COLOUR$BOLD$PROMPT_TEXT$COLOUR_RESET \[\u@$COLOUR$BOLD$(hostname -f)$COLOUR_RESET:\w\]\$ "

PS1=$MYPROMPT

अद्यतन करें: @KamilMaciorowski ने एक ऐसे ही प्रश्न की ओर संकेत किया है, हालांकि यह एक रंग से संबंधित नहीं था।


@KamilMaciorowski यह थोड़ा अलग है, हालांकि आप अन्य पोस्ट के लिए धन्यवाद मैं इसे इस तथ्य से कम करने में सक्षम था कि विशेष रूप से इंजेक्शन चर के साथ मुद्दा PROMPT_TEXT= हालाँकि मुझे बदलना पड़ा $MYPROMPT='${debian_chroot:+($debian_chroot)}\[\033[01;31m$($PROMPT_TEXT)\]\[\033[00m\] \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
MMT

जवाबों:


1

मेरा जवाब अन्यत्र लगभग पर्याप्त है, आप के उत्पादन को लपेटना चाहिए tput में \[ \]

लगभग पर्याप्त, क्योंकि आपके पास पहले से ही है \[ \] में गलत स्थानों; आपको उनसे छुटकारा पा लेना चाहिए। man 1 bash कहते हैं:

\[
गैर-मुद्रण वर्णों का एक क्रम शुरू करें, जिसका उपयोग टर्मिनल नियंत्रण अनुक्रम को प्रॉम्प्ट में एम्बेड करने के लिए किया जा सकता है

\]
गैर-मुद्रण वर्णों के अनुक्रम को समाप्त करें

इसका मतलब है कि उदा। $(hostname -f) किसी भी बाहर होना चाहिए \[ \]। तो या तो

  • हटाना \[ तथा \] स्पष्ट से MYPROMPT परिभाषा और हर जगह =$(tput …) साथ में ='\['"$(tput …)"'\]';

या

  • केवल परिवर्तन MYPROMPT परिभाषा। मैंने आपका मूल समायोजन किया:

    MYPROMPT="\[$COLOUR$BOLD\]$PROMPT_TEXT\[$COLOUR_RESET\] \u@\[$COLOUR$BOLD\]$(hostname -f)\[$COLOUR_RESET\]:\w\$ "
    # printing                ^^^^^^^^^^^^                 ^^^^                ^^^^^^^^^^^^^^                 ^^^^^^
    # non-pr.   ^^^^^^^^^^^^                ^^^^^^^^^^^^^        ^^^^^^^^^^^^                  ^^^^^^^^^^^^^
    

-1

अंत में मुझे टुटू रंग छोड़ना पड़ा।

मेरा अंतिम संकेत:

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  PROMPT_TEXT="PROD"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  PROMPT_TEXT="LAB"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.