मैं कैसे जांचूं कि मैं किस शेल का उपयोग कर रहा हूं?


355

मैंने पढ़ा कि टर्मिनल शेल के अलावा और कुछ नहीं है, और यूनिक्स शेल के विभिन्न स्वाद प्रदान करता है:

  • बॉर्न शेल (sh)
  • सी शेल (csh)
  • टीसी शेल (टीसीएस)
  • Korn खोल (ksh)
  • बॉर्न अगेन शेल (बैश)

प्रशन:

  • जब मैं एक टर्मिनल विंडो खोलता हूं, तो कौन सा शेल डिफ़ॉल्ट रूप से खोला जाता है?
  • मैं कैसे जांच करूं कि कितने गोले स्थापित हैं?
  • मैं अपने खाते से उपयोग किए गए शेल को कैसे बदलूं?


@KasiyA यह भी से संबंधित है askubuntu.com/questions/87853/...
डेज़ी

कृपया ध्यान दें कि टर्मिनल शेल का इंटरफ़ेस है (जो एक बिंदु पर वास्तव में भौतिक इंटरफ़ेस हुआ करता था), और शेल टर्मिनल नहीं है - यह एक कमांड दुभाषिया है। यह भी देखें askubuntu.com/a/640105/295286
Sergiy Kolodyazhnyy

जवाबों:


425

आप अपने टर्मिनल में निम्न कमांड टाइप कर सकते हैं कि आप किस शेल का उपयोग कर रहे हैं:

echo $0

यदि आप बैश ( बॉर्न अगेन शेल ) टर्मिनल का उपयोग कर रहे हैं तो परिणाम नीचे के समान दिखाई देगा :

-bash

2
है 0एक वातावरण चर?
Mi_Onim

43
@Mi_Onim $ 0 रनिंग प्रक्रिया का नाम है। यदि आप इसे शेल के अंदर उपयोग करते हैं तो यह शेल का नाम वापस कर देगा। यदि आप इसे किसी स्क्रिप्ट के अंदर उपयोग करते हैं, तो यह स्क्रिप्ट का नाम होगा।
किंगमिलो

2
नोट : यह इंटरैक्टिव के लिए काम नहीं करेगा csh% echo $0 No file for $0., लेकिन यह काम करता हैtcsh
सेर्गेई कोलोडियाज़नी

2
जब कोई सिम्बल होता है तो काम नहीं करता है। जैसा bashके रूप मेंsh
अनवर

9
@ अनवर एक अच्छा बिंदु बनाता है, आपको शेल नाम प्राप्त होने के बाद echo $0, ls -l `which <name>` यह देखने के लिए कि क्या यह किसी अन्य शेल बाइनरी के लिए सिम्प्लाइड है।
जीवनअमारा

121

डिफ़ॉल्ट पर्यावरण पर आपके पास मौजूद शेल को खोजने के लिए आप SHELLपर्यावरण चर के मान की जांच कर सकते हैं :

echo $SHELL

वर्तमान शेल उदाहरण को खोजने के लिए, वर्तमान शेल उदाहरण के PID वाले प्रक्रिया (शेल) को देखें।

शेल के वर्तमान उदाहरण का PID खोजने के लिए:

echo "$$"

अब पीआईडी ​​होने की प्रक्रिया खोजने के लिए:

ps -p <PID>

एक साथ रखते हुए:

ps -p "$$"

27
$ SHELL सिस्टम (या उपयोगकर्ता) के लिए डिफ़ॉल्ट शेल है, जो आमतौर पर (लेकिन जरूरी नहीं) शेल है जो वास्तव में किसी भी समय उपयोग किया जा रहा है।
किंगमिलो

1
@kingmilo: आप सही हैं, संशोधित जवाब।
heemayl

मुझे यह बहुत उपयोगी लगा जब 'su - <यूजरनेम>' के माध्यम से एक उपयोगकर्ता पर स्विच किया गया, उदाहरण के लिए पोस्टग्रेज, जेनकिंस की स्थापना के लिए ...
धमकाने वाले

1
echo $SHELLमुझे दिया /bin/cshऔर मुझे ps -p $$दिया 22673 pts/1 00:00:00 bash। किंगमिलो ने समझाया (ऊपर) कि वे समान क्यों नहीं हैं।
18446744073709551615

@ 18446744073709551615 मैंने यह नहीं कहा है कि वे समान हैं। कृपया उत्तर को फिर से ध्यान से पढ़ें; डिफ़ॉल्ट और वर्तमान शब्दों पर ध्यान दें ।
हेम्यल

25

$SHELLआपको डिफ़ॉल्ट शेल देता है। $0आपको वर्तमान शेल देता है।

उदाहरण के लिए: मेरे पास मेरे डिफ़ॉल्ट शेल के रूप में बैश है, जिसका उपयोग मैं अपने टर्मिनल ऐप के लिए करता हूं। लेकिन मेरे iTerm2 ऐप के लिए, मैं विंडो खुलते ही कमांड का उपयोग करता हूं /bin/ksh:।

तो मेरा iT iT2 पर $0मुझे देता है /bin/ksh$SHELLमुझे /bin/bashiTerm2 पर देता है । $0, $SHELLमुझे /bin/bashटर्मिनल पर देता है


2
यह अन्य शीर्ष मतदान के जवाबों का एक अच्छा वितरण है। धन्यवाद।
माइकल हॉफमन

मेरे लिए, मैंने zsh इंस्टॉल कर लिया है और यह वर्तमान डिफ़ॉल्ट है, जो कि bash में बदलने के लिए, मुझे bashटर्मिनल में सभी को टाइप करना है । वापस zsh पर जाने के लिए, टाइप करेंzsh
यूसुफ आज़ाद

8

यह जानने के लिए कि आपके उपयोगकर्ता के लिए कौन सा डिफ़ॉल्ट शेल है, आप चला सकते हैं:

echo "$SHELL"

उदाहरण के लिए यदि आप बैश का उपयोग कर रहे हैं तो आपको निम्नलिखित आउटपुट प्राप्त करने चाहिए:

/bin/bash

यदि आप किसी भी कॉन्फ़िगरेशन को नहीं बदलते हैं तो उसे बैश होना चाहिए क्योंकि बैश यह उबंटू का डिफ़ॉल्ट शेल है।


/ बिन / श शेल कमांड भाषा है और बॉर्न शेल नहीं है, कृपया अपना उत्तर संपादित करें।
किंगमिलो

@kingmilo /bin/shमेरे जवाब में कोई संदर्भ नहीं है
kos

@kol संपादित करने से पहले था। कृपया ध्यान दें कि $ SHELL सिस्टम (या उपयोगकर्ता) के लिए डिफ़ॉल्ट शेल है, जो आमतौर पर (लेकिन जरूरी नहीं) शेल है जो वास्तव में किसी भी समय उपयोग किया जा रहा है।
किंगमिलो

1
@kingmilo जवाब फिर से पढ़ना मुझे लगता है कि मैं समझता हूं कि आपकी चिंता क्या है, शायद मैंने खुद को अच्छी तरह से व्यक्त नहीं किया। मैंने अपने जवाब में "वर्तमान" का अर्थ स्पष्ट किया
kos

1
@frederickjh मछली यहाँ से एक अजीब सा है। $$चर वास्तव में है POSIX द्वारा परिभाषित और गोले के विशाल बहुमत पर काम करेंगे। मछली ने यहां मानक का पालन नहीं करने का फैसला किया है, इसलिए मुझे लगता है कि इसे अनदेखा करना उचित है। मैं पुष्टि कर सकता हूँ कि $$श, डैश, बैश, zsh, ksh, ऐश, tsh और csh में अपेक्षित रूप से काम करता है। वास्तव में, मेरे सिर के ऊपर से मैं मछली को छोड़कर किसी अन्य शेल के बारे में नहीं सोच सकता जहां यह काम नहीं करता है।
terdon

8

अन्य उत्तर शेल विशिष्ट विशेषताओं का उपयोग करते हैं, लेकिन हम यह पता लगाने की कोशिश कर रहे हैं कि हम किस शेल का उपयोग कर रहे हैं, इसलिए वे समस्या के उत्तर को मानते हैं। उदाहरण के लिए कोई भी उत्तर मछली पर काम नहीं करेगा।

sh -c 'ps -p $$ -o ppid=' | xargs ps -o comm= -p

इसके बजाय श के एक आह्वान में $ $ सिंटैक्स का उपयोग करें, लेकिन फिर हम पीपीआईडी ​​की तलाश कर रहे हैं पीआईडी ​​की नहीं। Cmd खोजने के लिए PPID का उपयोग करें।

sh -c 'ps -p $$ -o ppid=' | xargs -I'{}' readlink -f '/proc/{}/exe'

@ सुधार के लिए धन्यवाद


2
आप हेडर (और इसलिए s) को छोड़ने के लिए ppid=/ cmd=का उपयोग करते हैं tail -1, और /proc/.../exeयह देखने के लिए विचार करें कि कौन सी फ़ाइल चलाई जा रही है (क्योंकि cmdशेल को चलाने के लिए आउटपुट को जोड़-तोड़ किया जा सकता है)।
मूरू

1
जाहिरा तौर पर यह व्यस्त बॉक्स में काम नहीं करता है, गैर-पॉजिक्स अनुपालन के कारण: Ref: github.com/broadinstitute/cromwell/pull/…
Evan Benn

4

मूल पोस्ट में तीन प्रश्न पूछे गए थे। दिए गए उत्तर पहले प्रश्न को कवर करते हैं, "जब मैं एक टर्मिनल विंडो खोलता हूं, तो डिफ़ॉल्ट रूप से कौन सा शेल खोला जाता है?" वे एक सवाल का जवाब भी देते हैं, जो यह नहीं पूछा गया था, "मैं यह कैसे पता लगा सकता हूं कि वर्तमान में टर्मिनल में कौन सा शेल चल रहा है?" हालाँकि, जहाँ तक मैं देख सकता हूँ कि किसी ने भी मूल रूप से पूछे गए दूसरे या तीसरे प्रश्न का उत्तर नहीं दिया है, अर्थात् "मैं कैसे जाँचूँ कि कितने अंक स्थापित हैं?" और "मैं अपने खाते से उपयोग किए गए शेल को कैसे बदलूं?"

  • जवाब देने के लिए "मैं कैसे जांचूं कि कितने गोले स्थापित हैं?" निम्न कमांड सभी उपलब्ध शेल को सूचीबद्ध करेगा:

बिल्ली / आदि / गोले

उदाहरण के लिए, Ubuntu 18.10 की डिफ़ॉल्ट स्थापना पर यह देता है:

# / etc / गोले: मान्य लॉगिन गोले

/ Bin / श

/ Bin / पानी का छींटा

/ Bin / bash

/ Bin / rbash

हालाँकि, डिफ़ॉल्ट रूप से डैश डैश का एक प्रतीकात्मक लिंक है, जबकि rbash लिंक विकल्प -r ("प्रतिबंधित बैश") से टकराता है, इसलिए वास्तव में केवल दो गोले हैं, उपरोक्त सूची के अनुसार चार नहीं। निम्न कमांड आपको दिखाएगा कि क्या कोई सूचीबद्ध शेल वास्तव में प्रतीकात्मक लिंक हैं, और यदि ऐसा है तो वे कहां से लिंक करते हैं: ls -l / bin

  • अब सवाल के लिए "मैं अपने खाते से उपयोग किए गए शेल को कैसे बदल सकता हूं?" इसका अर्थ यह है कि "मैं स्थायी रूप से डिफ़ॉल्ट शेल को कैसे बदल सकता हूं जो एक टर्मिनल का उपयोग करेगा", https://wiki.ubuntu.com/ChangingShells#Changing_your_login_shell_which_is_permanent पर एक उत्तर है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.