यदि मुझे chsh और / etc / passwd तक पहुँच नहीं है, तो मैं अपने डिफ़ॉल्ट शेल को कैसे बदल सकता हूँ?


8

मैं एक विश्वविद्यालय दूरस्थ लिनक्स खाते पर काम कर रहा हूं, और डिफ़ॉल्ट शेल cshटैब पूरा होने के बिना दुख की बात है । मैं अपने खाते के डिफ़ॉल्ट शेल को कैसे बदल सकता हूं bash? chshउपलब्ध नहीं है।


1
विश्वविद्यालय खातों को संग्रहीत करने के लिए किस प्रणाली का उपयोग करता है? ldapmodifyशायद काम कर जाये।
15:16 बजे user1686

या, यदि वे एनआईएस का उपयोग कर रहे हैं, तो ypchshउचित आदेश होना चाहिए।
m000

यदि आप सिर्फ टैब पूरा करना चाहते हैं तो आप इन्हें अपने ~ / .cshrc set filecऔर में जोड़ सकते हैं set autolist
हेन्नेस

जवाबों:


11

यदि आप अपने डिफ़ॉल्ट शेल को आपके लिए बदल सकते हैं, तो आपको अपने sysadmins से पूछने का प्रयास करना चाहिए। यदि वे नहीं कर सकते हैं या नहीं (जैसा कि जब मैं कॉलेज में था), तो मैंने जो वर्कअराउंड का उपयोग किया था, वह जोड़ना था

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

को .cshrc। (निश्चित रूप से /path/to/bashएक वास्तविक पथ के साथ प्रतिस्थापित करना सुनिश्चित करें । यह bashआपके होम डायरेक्टरी के तहत उस का एक संस्करण भी हो सकता है , अगर सिस्टम-प्रदान किया गया संस्करण आपके स्वाद के लिए बहुत पुराना है।) दक्षता के लिए, यह सबसे अच्छा है। यह .cshrcसंभव के रूप में जल्दी संभव के रूप में ऐसा करने के लिए , ताकि आप अतिरिक्त .cshrcप्रसंस्करण से बचें bashजो cshप्रक्रिया बनने के बाद एक बार मूट हो जाएगा ।


यह मेरे लिए मेरे विश्वविद्यालय में काम नहीं आया। मुझे शायद सिसादिन से बात करनी पड़ेगी।
2rs2ts

3

आप बस से जुड़ सकते हैं

ssh -t yourhost bash

लॉग इन करने पर स्वचालित रूप से बैश शेल निष्पादित करने के लिए।


नीचे दिए गए टिप्पणियों से आप विकल्प देख सकते हैं

ssh -t yourhost exec bash

execएक नई प्रक्रिया चलाएगा और पुराने से बाहर निकलेगा, इसलिए यह cshप्रक्रिया सीधे निकल जाएगी।

यदि -lकमांड के अंत में बैश को एक तर्क के रूप में जोड़ा जाता है, तो इसे एक लॉगिन शेल के रूप में माना जाएगा, लेकिन शायद इसकी आवश्यकता नहीं है।


1
ssh -t yourhost exec -a bash -l bashप्रारंभिक शेल के अंदर एक प्रक्रिया के रूप में चलने के बजाय मूल शेल को पूरी तरह से बदलने के लिए।
शेपनर

@chepner: दिलचस्प है, मैं ssh -t host bashएक समान स्थिति में खुद एक सरल समाधान का उपयोग कर रहा हूं , लेकिन आपका तरीका बेहतर है। मैं बिल्कुल नहीं सोचा है exec, धन्यवाद! मैं आपके सुझाव के साथ पोस्ट को अपडेट करूंगा।
डैनियल एंडरसन

मुझे थोड़ी कल्पना मिली, हालांकि, bashअंतर्निहित कमांड के लिए तर्कों का उपयोग करते हुए exec
चेपनर

@chepner: आह हाँ, मैंने इसे डिफ़ॉल्ट शेल के रूप में zsh के साथ होस्ट पर अब आज़माया है और यह दोनों पर विफल रहता है -aऔर -l। मैं अपने उत्तर में उदाहरण को संशोधित करूंगा।
डैनियल एंडरसन

0

मैंने जो सबसे अच्छा समाधान पाया, वह स्टैकेक्सचेंज पर एक था। यहाँ लिंक स्टैकएक्सचेंज है और यहाँ समाधान है:

अपने घर डीआईआर में एक .profile फ़ाइल बनाएँ और निम्नलिखित में पेस्ट करें, या यदि आपके पास पहले से एक है तो अपने .profile के अंत में जोड़ें।

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

जब मैंने PAM के माध्यम से LADP प्रमाणीकरण का उपयोग कर बहुत कुछ खोजा, तो मुझे लगता है कि आपके उपयोगकर्ता होम डायरेक्टरी में SHELL = / bin / bash exec / bin / bash इन .profile फ़ाइल डालना सबसे अच्छा उपाय है।

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