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


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

  • बोर्न खोल (श)
  • सी खोल (सीएसएच)
  • टीसी खोल (टीसीएसएच)
  • कॉर्न शैल (ksh)
  • बोर्न अगेन खोल (बाश)

प्रशन:

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

236
2018-02-28 03:58


मूल


वर्तमान खोल को कैसे निर्धारित किया जा रहा है? पर stackoverflow.com - αғsнιη
@ कासिया यह भी संबंधित है askubuntu.com/questions/87853/... - d a i s y


जवाब:


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

echo $0

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

-bash

288
2018-02-28 04:03



है 0 एक पर्यावरण चर? - Mi_Onim
@Mi_Onim $ 0 चल रही प्रक्रिया का नाम है। यदि आप इसे खोल के अंदर उपयोग करते हैं तो यह खोल का नाम वापस कर देगा। यदि आप इसे किसी स्क्रिप्ट के अंदर उपयोग करते हैं, तो यह स्क्रिप्ट का नाम होगा। - kingmilo
ध्यान दें: यह इंटरेक्टिव के लिए काम नहीं करेगा csh। % echo $0 No file for $0. , लेकिन यह काम करता है tcsh - Sergiy Kolodyazhnyy
अगर कोई सिमलिंक होता है तो काम नहीं करता है। पसंद bash जैसा sh - Anwar
शेल नाम प्राप्त करने के बाद @ अनवर एक अच्छा बिंदु बनाता है echo $0, ls -l `which <name>`  यह देखने के लिए कि क्या यह एक और खोल बाइनरी के लिए सिम्लिंक है। - JivanAmara


आपके पास डिफ़ॉल्ट वातावरण पर खोलने के लिए आप का मान देख सकते हैं SHELL वातावरण विविधता:

echo $SHELL

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

खोल के वर्तमान उदाहरण के पीआईडी ​​को खोजने के लिए:

echo "$$"

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

ps -p <PID>

इसे एक साथ रखना:

ps -p "$$"

76
2018-02-28 04:06



$ SHELL सिस्टम (या उपयोगकर्ता) के लिए डिफ़ॉल्ट खोल है, जो आम तौर पर किसी भी क्षण में उपयोग किए जाने वाले शेल (आमतौर पर आवश्यक नहीं) है। - kingmilo
@kingmilo: ठीक है आप उत्तर संशोधित हैं। - heemayl
उपयोगकर्ता को 'su - <username>' के माध्यम से स्विच करते समय मुझे यह बहुत उपयोगी लगता है, उदा। पोस्टग्रेस, जेनकींस, सेट अप करने के लिए ... - bully
echo $SHELL मुझे दिया /bin/csh तथा ps -p $$ मुझे दिया 22673 pts/1 00:00:00 bash। किंगमिलो ने समझाया (ऊपर) क्यों वे समान नहीं हैं। - 18446744073709551615
@ 18446744073709551615 मैंने यह नहीं कहा है कि वे वही हैं। उत्तर को फिर से ध्यान से पढ़ें; ध्यान दें चूक तथा वर्तमान शब्दों। - heemayl


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

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

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


16
2017-11-18 11:45



यह अन्य शीर्ष वोट वाले उत्तरों का एक अच्छा असंबद्धता है। धन्यवाद। - Michael Hoffmann


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

echo "$SHELL"

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

/bin/bash

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


5
2018-02-28 04:02



/ bin / sh शैल कमांड भाषा है और बोर्न शैल नहीं, कृपया अपना उत्तर संपादित करें। - kingmilo
@kingmilo नहीं है /bin/sh मेरे जवाब में संदर्भ - kos
@kol संपादन से पहले था। कृपया यह भी ध्यान दें कि $ SHELL सिस्टम (या उपयोगकर्ता) के लिए डिफ़ॉल्ट खोल है, जो आम तौर पर किसी भी क्षण में उपयोग किए जाने वाले शेल (आमतौर पर आवश्यक नहीं) है। - kingmilo
@kingmilo कृपया ध्यान दें कि सवाल यह है कि "जब मैं टर्मिनल खोलता हूं जो डिफ़ॉल्ट रूप से खोल खोला जाता है ???" और यह जवाब है "यदि आपने कोई कॉन्फ़िगरेशन नहीं बदला है तो यह होना चाहिए Bash, क्योंकि यह उबंटू पर डिफ़ॉल्ट खोल है ", इसलिए उत्तर प्रश्न को फिट करता है - kos
@kingmilo फिर से जवाब पढ़ना मुझे लगता है कि मैं समझता हूं कि आपकी चिंता क्या है, शायद मैंने खुद को अच्छी तरह व्यक्त नहीं किया। मैंने अपने जवाब में "वर्तमान में" के अर्थ को स्पष्ट किया - kos


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

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

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

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

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


2
2018-04-06 04:00



आप का उपयोग करें ppid=/cmd=हेडर को छोड़ने के लिए (और इसलिए tail -1एस), और देखने पर विचार करें /proc/.../exe यह देखने के लिए कि कौन सी फाइल चल रही है (चूंकि cmd आउटपुट को जो भी शेल चलाया जा सकता है) द्वारा छेड़छाड़ की जा सकती है। - muru
जाहिर है यह गैर पॉज़िक्स अनुपालन के कारण व्यस्त बॉक्स में काम नहीं करता है: रेफरी: github.com/broadinstitute/cromwell/pull/... - Evan Benn