Linux के sh (bash नहीं) में कमांड प्रॉम्प्ट में करंट पथ को कैसे प्रदर्शित करें?


43

मैं शंट प्रॉम्प्ट (बैश शेल नहीं) में वर्तमान पथ प्रदर्शित करना चाहूंगा, जो वर्तमान में सिर्फ "#" दिखाता है, मैंने इसे शुरू करने की कोशिश की

env PS1="$(whoami)@$(hostname):$(pwd)"

तथा

set PS1="$(whoami)@$(hostname):$(pwd)"

में है /etc/profile

लेकिन जब निर्देशिका को बदला जाता है या उपयोगकर्ता बदलता है तो यह स्पष्ट नहीं होता है। कृपया इसे गतिशील बनाने का एक तरीका सुझाएं।


1
ध्यान दें कि प्रत्येक $()एक अलग कार्यक्रम चलाता है; यह पर्यावरण चर, जैसे $LOGNAME, $HOSTNAMEऔर $PWDइसके बजाय का उपयोग करने के लिए तेज़ होगा ।
ग्रैविटी

एक उत्तर दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरणों का उपयोग करना था, हालांकि, यह पूर्ण सही उत्तर है। क्या आप वास्तव में करना चाहते हैं जब तक संकेत का उपयोग किया जाता है जब तक अपने संकेत के अंदर कोड का सुरक्षित मूल्यांकन नहीं है।
माससकल

आपको बस निर्यात की आवश्यकता है "PS1 =" $ (whoami) @ $ (hostname): $ (pwd)> "फिर संपादित करें / आदि / प्रोफ़ाइल और अंत में इस लाइन को जोड़ें।
दिसंबर को एसडीसोलर

जवाबों:


76

दोहरे उद्धरण चिह्नों में कमांड प्रतिस्थापन "तुरंत विस्तारित हो जाते हैं। यह वह नहीं है जो आप अपने संकेत के लिए चाहते हैं। एकल उद्धरण 'उन सबस्टीट्यूशंस को संरक्षित करेगा, $PS1जिसमें प्रॉम्प्ट प्रदर्शित करते समय केवल विस्तारित हो जाते हैं। इसलिए यह काम करना चाहिए:

export PS1='$(whoami)@$(hostname):$(pwd)'

यदि आप अपने संकेत के अंत में सामान्य डॉलर का चिह्न और स्थान चाहते हैं, तो बस $अंत में जोड़ें (कोई आवश्यक नहीं बचना):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
आपके उत्तर में 'सेट' से 'एक्सपोर्ट' में बदलने के बाद एक आकर्षण की तरह काम किया export PS1='$(whoami)@$(hostname):$(pwd)$'मैंने परिवर्तन को बचाया /etc/profile। धन्यवाद।
ब्लेयर

@ ब्लेमर: setमेरे लिए काम किया (लेकिन मेरे पास देशी नहीं था sh)। लेकिन मैं इसे exportआपके सेटअप के अनुपालन के लिए बदल दूंगा ।
MPY

2
क्या इसे स्थायी बनाने का कोई तरीका है? वर्तमान में मुझे इसे हर बार जब मैं लॉग इन करना होता है। धन्यवाद!
the.ufon

3
आपने इस पंक्ति को /etc/profile(प्रश्न देखें) या ~/.profile!
खसखस

+1, इसके लिए अंत में कुछ सीमांकक की आवश्यकता होगी। जैसा कि, आप foo@localhost:/home/fools -laका उपयोग करते समय कुछ मिलता है ls -la
10

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
मुझे डर है कि बाश शेल के लिए काम नहीं करता, जब मैं ऐसा करता हूं तो मुझे \u@\h:\w>अपने कमांड प्रॉम्प्ट के रूप में मिलता है
ब्लीमर

1
एक अलग श संस्करण होना चाहिए; जैसा कि आप पहली पंक्ति से देख सकते हैं, इसने मेरे लिए sh 4.2 में काम किया।
जेनी डी

1
ऐसा हो सकता है। यह शेल व्यस्त बॉक्स से है। धन्यवाद। हालांकि आपकी मदद की सराहना करते हैं।
ब्लेयर

@Bleamer, यह मेरे साथ काम करता है BusyBox v1.19.4 built-in shell (ash)
cjm

प्रतिक्रिया @cjm के लिए धन्यवाद, हालांकि मैं इसमें और खुदाई करने से बचूंगा।
ब्लेमर

5

यह कमांड मेरे लिए काम करता है।

export PS1="\u@\h: \W:$"

कहाँ
\ u = उपयोगकर्ता नाम
\ h = hostname
\ W वर्तमान फ़ोल्डर का नाम (पूर्ण पथ नहीं)


+1 के लिए डब्ल्यू डब्ल्यू पैरामीटर
दिमित्री के

3

कुछ रंगों को जोड़कर शीघ्र संकेत देने पर विचार कर सकते हैं। उदाहरण के लिए:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1
यह वही है जिसे मैं देख रहा था। मुझे उम्मीद है कि हर किसी को जीवन में कुछ रंग पसंद होंगे :)
गोविंद कैलास

कम से कम मैं करता हूं। ;)
अरविद

1

एक उत्तर दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरण का उपयोग करना था, हालांकि, यह पूर्ण सही उत्तर नहीं है। क्या आप वास्तव में करना चाहते हैं जब तक संकेत का उपयोग किया जाता है जब तक अपने संकेत के अंदर कोड का सुरक्षित मूल्यांकन नहीं है।

set PS1="$(pwd)" 

सेट कमांड के रूप में कार्यशील निर्देशिका के लिए संकेत देता है।

set PS1="\$(pwd)" 

$ (pwd) का विस्तार नहीं करता है। इसके बजाय, PS1 $ (pwd) के शाब्दिक मूल्य पर सेट है।

इसे चलाकर परीक्षण / समझें:

echo $PS1

। यदि आप स्ट्रिंग देखते हैं: $ pwd, आपका शीघ्र काम करता है। यदि आप शाब्दिक मार्ग देखते हैं, तो संकेत को तोड़ दिया जाता है क्योंकि इसे सांख्यिकीय रूप से सेट किया गया है


1

सेट करने के लिए नीचे दिए गए कमांड का उपयोग करना cpanel की तरह है।

निर्यात PS1='$(whoami)@$ellingHOSTNAME%%.*} [$ (pwd)] ''


धन्यवाद! ऊपर दिए गए अन्य विकल्पों में से कोई भी काम नहीं किया। यह एक किया। मुझे पागल कर रहा था। मेरी पवित्रता को बचाने के लिए धन्यवाद। हा!
ली_स्टार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.