मैक टर्मिनल को फिर से शुरू करते समय काम करने वाली निर्देशिकाओं को कैसे पुनर्स्थापित किया जाए


16

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

मैं क्या गलत कर रहा हूं? इस में कुछ सेटिंग के कारण हो सकता है ~/.bash_profile?


मुझे लगता है कि आप इस धागे में जो ढूंढ रहे हैं वह आपको मिल सकता है। Apple.stackexchange.com/questions/863/…
dhempler

1
तो क्या मैं यह मानने में गलत हूं कि इसे बॉक्स से बाहर का समर्थन किया जाना चाहिए?
ओलिवर ड्रोट्बोहम

जवाबों:


15

(संदर्भ के लिए, हम Mac OS X Lion 10.7 और बाद के रिज्यूम फीचर के बारे में बात कर रहे हैं।)

यदि आप डिफ़ॉल्ट शेल, बैश का उपयोग कर रहे हैं तो टर्मिनल स्वचालित रूप से कार्यशील निर्देशिका को पुनर्स्थापित करता है। यदि आप कुछ अन्य शेल का उपयोग कर रहे हैं, तो आपको /etc/bashrcटर्मिनल से कार्यशील निर्देशिका को संप्रेषित करने के लिए एक एस्केप सीक्वेंस भेजने के लिए कोड को अनुकूलित करना होगा, ताकि बाद में यह फिर से शुरू हो सके। यदि आप zsh का उपयोग कर रहे हैं, तो मेरा जवाब Zsh-टर्मिनल (OS X Lion) को फिर से शुरू करें , जिसमें मैं zsh के लिए उपयुक्त कोड शामिल करता हूं।

यदि आपके पास कोई प्रथा है ~/.bash_profileया ~/.bashrcआपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि आप /etc/bashrcअनुकूलन को संशोधित करके डिफ़ॉल्ट व्यवहार को पूर्ववत नहीं कर रहे हैं । विशेष रूप से, यह PROMPT_COMMANDप्रत्येक प्रॉम्प्ट पर एस्केप अनुक्रम भेजने के लिए पर्यावरण चर सेट करता है। यदि आप उस चर को अनुकूलित करते हैं, तो आपको अपने कोड को वर्तमान मूल्य में उपसर्ग या जोड़ना होगा, उदाहरण के लिए:

PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"

इसके अलावा, आम तौर पर, ~/.bash_profileनिष्पादित करना चाहिए ~/.bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

1
उत्तर के लिए धन्यवाद, लेकिन मुझे लगता है कि काम पाने में सक्षम नहीं लगता है। मैंने अपना हटा दिया है .bashrc(हालाँकि मैं कोई भी प्रॉम्प्ट कमांड अनुकूलन नहीं कर सका। अब मैं निम्नलिखित कार्य करता हूं: 1. एक नई टर्मिनल विंडो खोलें (मेरे उपयोगकर्ता की होम डाइरेक्टरी में खुलती है) 2. सीडी दस्तावेज़ 3. क्विट टर्मिनल 4. ओपन टर्मिनल 5 । विंडो निर्देशिका परिवर्तन उत्पादन प्रदर्शित पुन: खोलता है, लेकिन अभी भी उपयोगकर्ता के घर निर्देशिका में स्थित है।
ओलिवर Drotbohm

@OliverGierke टर्मिनल इसलिए भी के लिए जाँच लॉगिन गोले बनाता है, ~/.bash_profile, ~/.bash_login, और ~/.profile
क्रिस पेज

मेरे पास बाद के दो नहीं हैं, पूर्व अब ~/.bashrcआपके उत्तर में आपके सुझाव के अनुसार निष्पादित करता है ।
ऑलिवर ड्रोटबोहम 17

2
मैं समझ गया, क्रिस। मुझे /etc/bashrcलगता है कि एक स्थापित स्क्रिप्ट या जो कुछ भी द्वारा tweaked किया गया है। वहाँ एक था /etc/bashrc.origजिसमें कुछ अतिरिक्त कॉन्फिग (जिसे मैं मूल सेटअप मानता हूं ) था gist.github.com/3273170/etc/bashrcफिर से उम्मीद के मुताबिक काम करने वाली चीजों को फिर से जोड़ना । मदद और धैर्य के लिए बहुत बहुत धन्यवाद!
ओलिवर ड्रोटबोहम

मैं अपने .bashrc में $ PROMPT_COMMAND नहीं बदलता और मेरे पास केवल सिस्टम डिफ़ॉल्ट / etc / bashrc है। कोई और सुझाव?
रिचर्ड

3

यदि आप बैश-इट का उपयोग कर रहे हैं, तो आप $PROMPT_COMMANDइसे अधिलेखित होने की समस्या में चला सकते हैं ।

जैसा कि उल्लेख किया गया है कि इसका उपयोग OS X द्वारा नए टैब में cwd को पुनर्स्थापित करने के लिए किया जाता है। बैश इसे मूल्यों को जोड़ना चाहिए, उन्हें ओवरराइड नहीं करना चाहिए।

लेकिन अभी के लिए एक समाधान यह होगा कि आप निम्नलिखित पंक्ति को अपने साथ जोड़ें ~/.bash_profile

source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"

अधिक जानकारी के लिए अद्यतन के लिए समस्या ट्रैकर की जाँच करें: https://github.com/revans/bash-it/issues/240

और इसके लिए एप्पल संदर्भ https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html


1

मैंने इस उत्तर को खोजने से पहले csh / tcsh के लिए यह करने के बारे में एक ब्लॉग पोस्ट लिखा ; अगर कोई और उन गोले के समाधान की तलाश में यहां आता है, तो यह है:

if ("$?TERM_PROGRAM") then
  if ("$TERM_PROGRAM" == "Apple_Terminal") then
    alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
  endif
endif

इसे अपने .cshrcया .tcshrcउचित के रूप में जोड़ें । (बाहरी यदि कथन ssh के साथ दूरस्थ रूप से लॉग इन करते समय किसी त्रुटि से बचने के लिए आवश्यक है। tcsh में परिवर्तनशील विस्तार नियमों के कारण इसे एक अलग कथन होना चाहिए।)

Apple के बिलिन बैश सपोर्ट की तरह, यह सॉल्यूशन printfकेवल बचने वाले स्थानों की कीमत पर, इसके अलावा कोई बाहरी प्रोग्राम का उपयोग नहीं करता है । यदि आपको अन्य विशेष पात्रों से बचने की आवश्यकता है, तो आपको अधिक व्यापक समाधान खोजने के लिए थोड़ी मेहनत करनी होगी।

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