जब मैं एक सर्वर में लॉग इन कर रहा हूँ तो कलर बदलने के लिए संकेत दें


15

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

इसलिए मैं चाहता हूं कि मेरे सिस्टम पर जब रंग हरा हो और सर्वर से कनेक्ट होने पर लाल रंग में बदले। मेरे पास बड़ी संख्या में सर्वर हैं जिन्हें मैं .bashrcउन सभी पर अलग नहीं रखना चाहता ।


शायद ऩही। लेकिन यह करने के लिए वापस superuser.com/questions/33712/...
यादृच्छिक

1
अपने टर्मिनल को लाल (या कुछ अन्य रंग) क्यों न बनाएं ताकि जब आप उनसे कनेक्ट हों तो आपको एक डिफ़ॉल्ट सफेद मिल जाए?
मोनिका को बहाल करना - 29--

जवाबों:


9

रिमोट प्रॉम्प्ट को रिमोट द्वारा सेट किया जाता है ~/.bashrc। तो आपको अभी भी इसे दूरस्थ सर्वर पर कॉपी करने की आवश्यकता है। हालाँकि, आप ~/.bashrcसभी होस्ट के लिए एक का उपयोग कर सकते हैं , और hostname के आधार पर शीघ्र रंग सेट कर सकते हैं :

[ "$PS1" ] || return 0                           # continue only when interactive
case $(hostname -s) in
laptop*)
    prompt_color='\033[48;5;16m\033[38;5;46m'    # green(46) on black(16)
    ;;
server*)
    prompt_color='\033[48;5;16m\033[38;5;196m'   # red(196) on black(16)
    ;;
esac
ORIG_PS1=$PS1                                    # in case needed
PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset prompt_color

टिप्पणियाँ:

  • PS1यदि यह पहले से सेट नहीं है तो सेट न करें (यानी, यदि शेल इंटरएक्टिव नहीं है)। यदि PS1गैर-रिक्त है तो परीक्षण करना यह तय करने का एक बहुत ही सामान्य तरीका है कि क्या शेल इंटरएक्टिव है, और आप उन कार्यक्रमों को भ्रमित नहीं करना चाहते जो ऐसा करते हैं। (संभवत: एक अधिक सटीक परीक्षण जाँच कर रहा है यदि $-इसमें शामिल है i।)

  • यदि आप चाहते हैं कि यह कोड किसी दूरस्थ सर्वर में प्रवेश करते समय चले, तो आपके पास एक प्रोफाइल फाइल हमेशा स्रोत होनी चाहिए ~/.bashrc। लेकिन मुझे लगता है कि तुम जानते हो।

  • में PS1, भागने के कोड को संलग्न किया जाना चाहिए \[...\]

  • \[033[mडिफ़ॉल्ट के लिए अग्रभूमि और पृष्ठभूमि रीसेट करता है। तो यहाँ, :\wटर्मिनल अग्रभूमि / पृष्ठभूमि में दिखाई देते हैं।

  • \[033[48;5;XXXm\033[38;5;YYYmपृष्ठभूमि / अग्रभूमि करने के लिए सेट XXX/ YYY

  • एक स्क्रिप्ट के लिए जो उपलब्ध रंगों को डंप करता है, प्रयास करें colortest

  • यह देखने के लिए कि प्रॉम्प्ट कैसा दिखेगा:

    echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "

7

यदि आप चाहते हैं कि (रीमेक) अलग न हो PS1, तो मैं कहूंगा कि "नहीं", यह कम से कम भयानक रूप से मुश्किल होगा। विचार करें कि SSH कनेक्शन पर स्थानीय पक्ष को इस बात का कोई वास्तविक विचार नहीं है कि शेल प्रॉम्प्ट क्या है और कुछ और क्या है, और इसलिए प्रॉम्प्ट के लिए रंग सेट करना वास्तव में रिमोट से आना है। आप सत्र शुरू करने से पहले रंग सेट कर सकते हैं, लेकिन वे सभी आउटपुट के लिए प्रभावी होंगे, जब तक कि lsएक संपादक खुद का रंग सेट न करे।

बेशक आप सत्र के लिए कुछ रैपर के साथ आ सकते हैं ताकि सब कुछ एक संकेत की तरह लग रहा हो और इसे रंग देने के लिए, लेकिन यह आसानी से झूठी सकारात्मक (हर लाइन पर रंग के साथ $?) का नेतृत्व करेगा और बस ड्रॉप करने की तुलना में भयानक रूप से जटिल होगा? आपके .profileया .bashrcप्रत्येक मशीन पर सिंगल लाइन ।

कई मशीनों के साथ, उन सभी पर कॉन्फ़िगरेशन परिवर्तनों को सिंक्रनाइज़ करने के लिए समाधान खोजने के लिए किसी भी मामले में उपयोगी हो सकता है। इसके लिए बने कुछ उपकरण, या सिर्फ एक स्क्रिप्ट, या उन सभी के लिए एक () के विन्यास फाइल (ओं) की प्रतिलिपि बनाने के लिए एक लूप चल रहा है।


2
वह आखिरी पैराग्राफ कुंजी है। यदि ओपी "सर्वरों की एक बड़ी संख्या" का प्रबंधन कर रहा है, तो यह आश्चर्यजनक है कि प्रत्येक को पहली बार व्यक्तिगत रूप से कॉन्फ़िगर करना होगा।
मोनिका

5

मैं sshpass के साथ एक रैपर स्क्रिप्ट का उपयोग कर रहा हूं जो पहले एक अस्थायी प्रोफ़ाइल अपलोड करेगी और फिर इस प्रोफ़ाइल का उपयोग करके ssh (और टेम्प्लेट फ़ाइल हटाएं)।

स्क्रिप्ट की दो मुख्य बातें ये हैं:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"

इसका उपयोग करके आप दूरस्थ सत्रों के रंगों को आसानी से परिभाषित कर सकते हैं।

मुझे पता है कि यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन इसका उपयोग इसे हल करने के लिए किया जा सकता है।


3
sshpass -pयदि संभव हो तो उपयोग न करें ! प्रोग्राम चलाने के लिए कमांड लाइन तर्क आमतौर पर सभी उपयोगकर्ताओं के लिए दिखाई देते हैं ps, और इसलिए पासवर्ड होगा। यहां तक ​​कि अगर आपके पास मशीन पर कोई अन्य उपयोगकर्ता खाते नहीं हैं, तो आप इसे गलती से स्क्रीन पर प्रिंट कर सकते हैं। sshpassएक पर्यावरण चर से पासवर्ड पढ़ सकते हैं, जो उपयोग करने के लिए बहुत मुश्किल नहीं है। इसके अलावा, ssh कुंजियों पर विचार करें यदि आप वैसे भी किसी फ़ाइल में लॉगिन क्रेडेंशियल को सहेजने जा रहे हैं।
लक्काचु

आप सही हैं और मैं इसके उपयोग को बढ़ावा देने की कोशिश नहीं कर रहा था। मैं अपनी स्क्रिप्ट से केवल एक उदाहरण के रूप में चिपका रहा था जिसका उपयोग केवल विकास के उद्देश्य के लिए किया जा रहा है और कोई सुरक्षा जोखिम प्रदान नहीं करता है। SSHPASS चर उत्पादन प्रणालियों के लिए खाली छोड़ दिया जाएगा जहां ssh कुंजी का उपयोग किया जाता है। मैं अपडेट करूंगा।
मिकेल Kjær

1

आपको इसमें रुचि हो सकती है context-color, जिसे मैंने उस सटीक उद्देश्य के लिए एक साथ रखा है: https://github.com/ramnes/context-color

यह एक साधारण स्क्रिप्ट है, जिसे निष्पादित करते समय, कमांड आउटपुट के हैश के आधार पर एक रंग को आउटपुट करता है। इसके साथ यह आपके में कहीं स्थापित है $PATH, आप कुछ इस तरह से अपने में कर सकते हैं .bashrc:

export PS1="$(context-color -p)$PS1\[\e[0m\]"

(जहां --prompt/-pस्विच है ताकि रंग प्रॉम्प्ट के लिए बच गया है, और \[\e[0m\]रंग को रीसेट करने के लिए भागने का क्रम)

डिफ़ॉल्ट रूप से, हैश उत्पन्न करने के लिए प्रयुक्त कमांड है whoami; hostname। यदि आप केवल होस्टनाम के अनुसार रंग बदलना चाहते हैं, तो आप $CONTEXTचर वातावरण ( export CONTEXT="hostname") को बदल सकते हैं या बस --context/-cविकल्प ( context-color -c "hostname") का उपयोग कर सकते हैं ।

एक उदाहरण के लिए नीचे देखें:

डेमो

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