मैं स्क्रीन को मानक बैश शेल की तरह व्यवहार करने के लिए कैसे कहूं?


37

बस लिनक्स पर स्क्रीन कमांड के बारे में सीखा - यह प्रतिभाशाली है। मुझे यह पसंद है। हालांकि, स्क्रीन में वास्तविक टर्मिनल / प्रॉम्प्ट मेरे मानक बैश प्रॉम्प्ट की तुलना में अलग दिखता है और व्यवहार करता है। यही है, रंग समान नहीं हैं, टैब पूरा होने पर काम नहीं लगता है, आदि।

क्या कोई तरीका है जो मैं स्क्रीन को सामान्य (कम से कम, सामान्य के रूप में जो मैं इस्तेमाल किया जाता हूं) को बैश प्रॉम्प्ट की तरह व्यवहार करने के लिए कह सकता हूं?

अतिरिक्त जानकारी

मैं एक ssh के माध्यम से एक मैक (टर्मिनल) से एक हेडलेस लिनक्स बॉक्स (उबंटू) से जोड़ रहा हूं। लॉग इन करने के बाद, मेरे पास है TERM=xterm-colorऔर जब मैं स्क्रीन चलाता हूं तो मेरे पास है TERM=screen

नीचे दिए गए सुझावों की कोशिश करने जा रहा हूं कि क्या मैं $TERMपहले मूल्य बदल सकता हूं ।


बस जिज्ञासा से बाहर ओएस क्या है, और स्क्रीन शुरू होने पर आपके पास किस प्रकार का टर्मिनल है? मुझे लगता है कि आपके मुद्दों का आपके टर्मिनल के साथ कुछ गलत करने या स्क्रीन पर गलत तरीके से पहचान करने से अधिक होगा।
Zoredache

@Zoredache - मैंने उस जानकारी को पोस्ट में जोड़ा, ऊपर। धन्यवाद। मैं अपने टर्मिनल की सेटिंग्स को समायोजित करने की अनुमति देने के लिए बैकस्पेस कुंजी को काम करने की अनुमति देता
हूं

हाँ, मैं वास्तव में Terminal.app पसंद नहीं करता। व्यक्तिगत रूप से मेरा सुझाव है कि आप एक वैकल्पिक दृश्य ( serverfault.com/questions/19240/… ) का उपयोग करने पर विचार करें
Zoredache

जवाबों:


38

इस पोस्ट के लिए धन्यवाद , मैंने जो किया वह एक पंक्ति में जोड़ा गया था ~/.screenrc:

# ~/.screenrc
defshell -bash      # dash makes it a login shell

अपने में फिर बातें ~/.bashrc, /etc/bashrcआदि चलाने लेना चाहिए।


13

स्क्रीन शब्द-प्रकार को बदलता है screen। आप दो काम कर सकते हैं:

  1. अपने में टर्म सेटिंग बदलें .screenrc
  2. अपनी .bashrcफ़ाइलों को संशोधित करें TERM=screenऔर साथ ही देखेंTERM=xterm

4
धन्यवाद! मैंने एक $HOME/.screenrcफ़ाइल बनाई और इस पंक्ति को शीर्ष पर जोड़ा: term xterm-colorऔर वा ला! रंग संकेत और $TERMमान मेल खाते हैं। हालांकि, कोई भी टैब पूरा नहीं हुआ ...
कांटाडोम

आपको उस टैब को पूरा करने की आवश्यकता है जो टैब को पूरा करता है। डिफ़ॉल्ट शेल कॉन्फ़िगरेशन स्क्रिप्ट पूरी तरह से संगत नहीं हैं कि वे इसके आधार पर क्या सक्षम करते हैं $TERM; कुछ चीजें xterm के साथ-साथ xterm-color में भी सक्षम होंगी, अन्य केवल xterm की तलाश करते हैं। अन्य चीजों में अन्य स्विच हैं।
स्टेटिक्सन

11

मुझे आपका प्रश्न लिखने का तरीका पसंद है, मैं खुद से वही बात पूछ रहा था और यह पता लगाने में थोड़ा समय लगा। मुझे पहले से ही शेल इनवोकेशन के बारे में थोड़ा पता था, इसलिए मैं भाग्यशाली था कि मुझे लगा कि समस्या कहीं न कहीं है।

यहाँ मेरे निष्कर्ष हैं। सबसे पहले, मैं व्यक्तिगत रूप से इसे दिलचस्प मानता हूं और एक लॉगिन शेल और एक गैर-लॉगिन शेल के बीच अंतर जानने के लायक है। एक है man $SHELLऔर मंगलाचरण पर अनुभाग के लिए खोज इसके बारे में अधिक पढ़ने के लिए।

आप अपने वर्तमान शेल उदाहरण से पूछ सकते हैं कि क्या यह एक लॉगिन शेल या shopt login_shellआपके प्रॉम्प्ट पर जारी करके गैर-लॉगिन शेल है । ध्यान दें कि यह आम तौर पर केवल पढ़ा जाने वाला विकल्प है।

मेरे डेबियन सिस्टम पर, screenहमेशा गैर-लॉगिन शेल के साथ डिफ़ॉल्ट रूप से आया है।

वेब पर खोज और पढ़ने के बाद man $SHELL, मैंने कुछ चीजों का परीक्षण किया और निम्नलिखित दो दृष्टिकोण मेरे लिए काम किए। में ~/.screenrcइस प्रकार जोड़ें / एक पंक्ति को अद्यतन:

shell -$SHELL

यदि वह काम नहीं करता है और आप उपयोग कर रहे हैं bash, तो आप वैकल्पिक रूप से कोशिश कर सकते हैं, जैसा कि सीमस द्वारा साझा किया गया है :

defshell -bash

जैसा कि उल्लेख किया गया है, आप यह जांच सकते हैं कि क्या आपका वर्तमान शेल उदाहरण shopt login_shellआपके प्रॉम्प्ट पर जारी करके लॉगिन शेल है ।


क्या वर्तमान निर्देशिका में शेल लॉन्च करने का तरीका है? मेरी इच्छा क्या है, इसका एक उदाहरण निम्नलिखित है cd ~/Projects ; screen ; pwd #=> ~/Projects। हालांकि, मैं क्या जोड़ने के बाद मिलता है shell -$SHELLमेरी को ~/.screenrcहैcd ~/Projects ; screen ; pwd #=> ~/
rudolph9

9

आपको बैश चलाने के लिए कैसे उपयोग किया जाता है, इसके आधार पर, आप एक लॉगिन शेल चला सकते हैं। जब आप दौड़ते हैं screen, तो आप एक गैर-लॉगिन इंटरैक्टिव शेल चला रहे हैं।

अंतर वह है जिसमें स्टार्टअप स्क्रिप्ट को चलाया जाता है।

  • /etc/bash.bashrcतब ~/.bashrcखट्टा हो जाता है जब एक गैर-लॉगिन इंटरैक्टिव शेल शुरू किया जाता है

  • /etc/profileतब पहली बार मिला , और जब एक इंटरेक्टिव लॉगिन शेल शुरू किया जाता है ~/.bash_profile, तो वह खट्टा हो जाता है~/.bash_login~/.profile

इससे आप प्रभावित हो सकते हैं।

मैं यह देखने के लिए भी जांच करूंगा कि क्या $TERMयह अलग है।


2

स्क्रीन बैश की जगह नहीं लेती, यह इसे चलाता है, या कोई अन्य शेल। शायद यह चल रहा है csh, zshया bashअलग-अलग पैरामटर्स के साथ।

पहली चीज़ जो मैं कोशिश करूँगा, वह यह है कि यह जाँचना psऔर /proc/<pid>/cmdlineसुनिश्चित करना है कि यह समान मापदंडों के साथ समान शेल का उपयोग कर रहा loginहै।

उसके बाद, FILES अनुभाग में /etc/screenrcउल्लिखित किसी भी अन्य फ़ाइल की जाँच man screenकरें।


मैंने एक psकमांड चलाई और यह दिखाता है कि bashयह चल रहा है (यह स्क्रीन के अंदर एक ps कमांड है) ... मुझे काम रंग मिला (ऊपर) बस टैब पूरा हो रहा है।
कांटाडोम

2

मेरे पास एक ही समस्या थी, जब मैं स्क्रीन चलाता था तो मैं शांत पीएस 1 रंग शीघ्र खो देता था जिसे मैंने शिल्पगत रूप से पाया था: पी।

समस्या यह है कि मैं इसे ~ / .bash_profile में इस तरह से चला रहा था

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

इसका मतलब है कि जब स्क्रीन bash_profile चला रहा था PS1 को नहीं ले जाया जा रहा है।

फिक्स आसान है: इस तरह दिखने के लिए ~ /। Bash_profile में PS1 स्टेटमेंट में एक्सपोर्ट जोड़ें:

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

जैसे कि नेस्टेड निष्पादन में चर खो नहीं जाता है।


1

बस "डिफ्शेल -बैश" के बारे में कुछ जोड़ना चाहते हैं (जो कि मुझे अभी पता चला है, महीनों के बाद सिर खुजलाना)। जब आप ऐसा करते हैं, तो स्क्रीन द्वारा चलाए जाने वाले बच्चे के खोल में $ bELL "bash" के बजाय "/ बिन / बैश" के बजाय सामान्य रूप से होगा। यदि आप अपने स्क्रीन सत्र के अंदर "स्क्रिप्ट" चलाते हैं, तो आपको यह मिलता है:

$ script
Script started, file is typescript
script: failed to execute bash: No such file or directory

या कम से कम मेरे Ubuntu 14.04 बॉक्स पर ऐसा होता है। मेरे द्वारा उपयोग किए जा रहे वर्कअराउंड को चलाना है $ SHELL=/bin/bash script। मुझे लगता है कि $ गलत सेट गलत होने से अन्य सामान टूट जाएगा, लेकिन स्क्रिप्ट वही है जो मैंने देखी है।


0

.profileकिसी भी शेल आरंभीकरण शुरू होने से पहले मैं अपने स्निपेट का उपयोग कर रहा हूं : which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }

फिर, अगर कोई स्क्रीन सत्र नहीं चल रहा है, तो मैं ... ठीक है, मैं मानक शेल प्रॉम्प्ट में नहीं आता हूं। वहाँ sudopasword के लिए एक और संकेत है (जब से मैं सर्वर का प्रशासन करने के लिए लॉग इन करता हूँ 99%), और अगर मैं एक लंबा काम करने की योजना बना रहा हूं, तो मैं अपने उपयोगकर्ता के सत्र में मैन्युअल रूप से sudo लॉगिन, लॉन्च स्क्रीन को रद्द कर देता हूं और वहां sudo।

यहां मुख्य बिंदु "किसी भी शेल आरंभीकरण से पहले" है, ताकि जब आपके पास पहले से ही एक स्क्रीनिंग सत्र हो, तो यह पहले से ही लोकेल और अन्य सामान के साथ आरंभीकृत हो जाता है और आपको इसे फिर से करने की आवश्यकता नहीं है।

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