टर्मिनल के लिए डिफ़ॉल्ट शेल क्या है?


51

मान लीजिए, मैंने एक टर्मिनल खोला और कुछ शेल कमांड्स को प्रविष्ट / निष्पादित किया।

लेकिन मैंने स्पष्ट रूप से बैश या किसी अन्य शेल का आह्वान नहीं किया।

डिफ़ॉल्ट रूप से किस शेल का उपयोग किया गया था?

जवाबों:


51

आपकी लाइन में निर्दिष्ट एक /etc/passwd(यह एक :अलग लाइन है और शेल अंतिम एक है)।

उदाहरण के लिए मेरा:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

यह यहाँ है /bin/bash(उबंटू डिफ़ॉल्ट)

आप यह भी उपयोग कर सकते हैं chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

यह मुझे बता रहा है कि मेरा खोल है /bin/bashऔर मुझे इसे बदलने की अनुमति देता है।

अंत में, echo $SHELLवही करेंगे:

$ echo $SHELL
/bin/bash

अगर यह bash है, तो इसे कभी-कभी sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" की तरह स्पष्ट रूप से क्यों आमंत्रित किया जाता है ??
DrStrangeLove

मुझे लगता है कि व्यक्तिगत रूप से एक बुरा आदेश है - इसमें से किसी को भी रूट की आवश्यकता नहीं है। यदि यह किया था , यह बेहतर रूप में लिखा जाएगा sudo netstat -an | grep LISTEN | grep -v ^unix। मुझे लगता है कि एक बैश उपखंड में घेरने का कोई कारण नहीं दिखता है।
सीज़ियम

2
@DrStrangeLove: यदि पाइप में एक से अधिक कमांड को रूट अनुमतियों की आवश्यकता है, तो sudo bash -c "..."यह सुनिश्चित करेगा कि पूरे पाइप को रूट द्वारा निष्पादित किया गया है।
कीथ थॉम्पसन

यदि आपको नहीं पता कि किन कमांड्स को रूट (और क्यों) की आवश्यकता है, तो आपको उन्हें नहीं चलाना चाहिए। अन्यथा, किसी भी कमांड / प्रोग्राम / स्क्रिप्ट पर आवश्यकता से अधिक भरोसा क्यों करें। यदि आप नहीं कर सकते हैं commandA | sudo commandB | commandC, तो आप sudo idपहले कर सकते हैं ( idकमांड को चलाता है root, लेकिन " पासवर्ड प्रॉम्प्ट के बिना
सुडो का

2
यदि आप उपयोग करते हैं chshतो आपको यह परिवर्तन देखने के लिए लॉग आउट और लॉग इन करना होगा
नील ट्रॉफ्ट

17

GNU बैश उबंटू पर टर्मिनलों में डिफ़ॉल्ट रूप से उपयोग किया जाने वाला खोल है। हालाँकि जब सिस्टम बूट पर स्क्रिप्ट निष्पादित की जाती है तो डैश का उपयोग किया जाता है, क्योंकि यह डैश है जो कि / bin / sh है।

यह $ SHELL पर्यावरण चर में परिभाषित किया गया है। आप echo $SHELLटर्मिनल में टाइप करके देख सकते हैं ।


14

निम्नलिखित टाइप करके प्रदर्शित होगा कि टर्मिनल किस खोल के साथ खोला गया है:

echo $SHELL

हालांकि, यह पता लगाने के लिए कि आप वर्तमान में किस शेल में हैं (आप इसे बदल सकते हैं) प्रकार

ps -p $$

उदाहरण के लिए, आप देखेंगे कि शेल उदाहरण आउटपुट में बैश है

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

एक अन्य विधि का उपयोग करना है

echo $0

यह केवल वर्तमान शेल का नाम लौटाएगा।


सादगी के लिए +1echo $0
djthoms 19

बहुत बढ़िया जवाब! धन्यवाद, किसी कारण से गूंज $ शेल काम नहीं किया (हमेशा उस एक का इस्तेमाल किया) और आपके दो विकल्पों ने काम किया। धन्यवाद!
भेड़ियाडेन

3

डिफ़ॉल्ट रूप से यह बैश है:

env | grep ^SHELL=

ज्यादातर मामलों में उत्पादन होगा

SHELL=/bin/bash

जरुरी नहीं। यदि आप एक नया उपयोगकर्ता बनाते हैं useradd, तो यह चूक करता है sh$ useradd -D|grep SHELL SHELL=/bin/sh
स्पार्कवॉक

+1, क्योंकि यद्यपि चयनित उत्तर को कम टाइपिंग की आवश्यकता होती है, लेकिन कुछ करने के लिए एक से अधिक तरीके होना हमेशा अच्छा होता है।

2

वर्तमान शेल निष्पादन योग्य की फ़ाइल पथ प्राप्त करने के लिए कोई भी उपयोग कर सकता है

readlink -f /proc/$$/exe

कुछ संभावित आउटपुट निम्न हैं:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.