मैं एक विंडो मैनेजर कीबाइंड से अंतिम उपयोग की गई उसी निर्देशिका में एक नया टर्मिनल कैसे खोल सकता हूं?


25

मैं एक टाइलिंग विंडो मैनेजर का उपयोग कर रहा हूं और मैंने विंडो मैनेजर द्वारा प्रबंधित gnome-terminalकई urxvtउदाहरणों से कई टैब से स्विच किया है। मेरे द्वारा याद की जाने वाली सुविधाओं में से एक नया टर्मिनल खोलने की क्षमता है जो पिछले एक की कार्यशील निर्देशिका में चूक करता है।

संक्षेप में: मुझे एक नए urxvt (बैश) को खोलने का एक तरीका चाहिए जो पिछले इस्तेमाल किए गए $ PWD के लिए डिफॉल्ट करता हो।

मेरे दिमाग में आने वाला एकमात्र उपाय यही है कि वर्तमान पथ को cdकुछ इस तरह से बचाया जाए :

echo $PWD > ~/.last_dir

और नए टर्मिनल पर इस तरह से पथ को पुनर्स्थापित करें:

cd `cat ~/.last_dir`

मैं दूसरी कमांड का स्रोत बना सकता हूं .bashrcलेकिन मुझे नहीं पता कि हर निर्देशिका परिवर्तन पर पहले एक को कैसे निष्पादित किया जाए :)

कोई भी सरल समाधान जिसमें शामिल नहीं है screenया tmuxउपयोग स्वागत योग्य है।


क्या आप " tabbed" पर्ल एक्सटेंशन का उपयोग कर रहे हैं urxvt?
रोज़ज़ेट्रेज़ियावेज़

कोई टैब नहीं, मैं WM द्वारा प्रबंधित नए टर्मिनलों का उपयोग कर रहा हूं
Luca

जवाबों:


9

मैं तीन समाधान का उपयोग कर देखता हूं .last_dir। आप जगह दे सकते हैंecho $PWD > ~/.last_dir या तो हैं:

  1. एक विशेष समारोह में जो के लिए एक आवरण होगा cd :

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }

    इसे अपने में रखें ~/.bashrc और फिर cd_सीडी के बजाय हर बार जब आप चाहते हैं कि आपकी नई कार्यशील निर्देशिका संग्रहीत की जाए।

  2. आपके $PROMPT_COMMAND( अनुशंसित नहीं ):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"

    आप इसे टर्मिनल से सीधे परीक्षण कर सकते हैं या इसे अंदर रख सकते हैं ~/.bashrc। यह समाधान, हालांकि, डिस्क दिखाई देने पर प्रत्येक बार प्रॉम्प्ट को ट्रिगर करता है, जो परेशानी का कारण हो सकता है - लेकिन दूसरी ओर, .last_dirवर्तमान निर्देशिका में कोई फर्क नहीं पड़ता कि आप वहां कैसे पहुंचे।

  3. के लिए एक कस्टम पर्ल एक्सटेंशन स्क्रिप्ट में rxvt। मैंने कभी खुद को नहीं बनाया है, लेकिन आप वेब पर काफी कुछ उदाहरण पा सकते हैं।


PROMPT_COMMAND वही है जिसकी मुझे तलाश थी। मैं इस समाधान की कोशिश करूँगा कि यह प्रदर्शन को प्रभावित न करे।
लुका

ठीक है, यह एक कच्चा रास्ता है, स्पष्ट रूप से। व्यक्तिगत रूप से, मुझे माइकल का समाधान सबसे अच्छा लगता है :)
rozcietrzewiacz

1
मुझे पर्ल एक्सटेंशन का तरीका पसंद है, अगर इसे टर्मिनल के बाहर काम करने की आवश्यकता है; यह किसी चीज को हैक करने से ज्यादा साफ-सुथरा लगता है PROMPT_COMMAND, जो अब तक के सबसे ज्यादा दुरुपयोग वाले पर्यावरण चर में से एक है
माइकल Mrozek

ऐसा लगता है कि $ PWD का मूल्यांकन केवल पहली बार हुआ है
Luca

@neon Aaah ... क्षमा करें। समस्या यह है कि PROMPT_COMMAND को कैसे उद्धृत किया जाए। (या यों कहें कि कैसे उद्धृत नहीं किया $PWDगया था ।) मुझे इसे ठीक करने दें ... वहाँ। उसे ऐसा करना ही चाहिए।
rozcietrzewiacz

13

मैं वर्तमान में # 1 समाधान के इस संस्करण का उपयोग कर रहा हूं

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

मेरे अंदर .zshrc


मैं # 1 समाधान का भी उपयोग कर रहा हूं और यह भी जोड़ना trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXITचाहता हूं कि मैं अपने घर में हमेशा शुरुआत करता हूं, जब मैं एक नया टैब
खोलता हूं

यह auto_cdzsh की सुविधा का उपयोग करते हुए काम नहीं करता है । यह पता चलता है कि हम एक हुक का उपयोग कर सकते हैं जो zsh प्रदान करता है: gist.github.com/jonleighton/1f0b96b49247a07dbaa30fbbe70b34f7
jonleightb

12

यह वास्तव में बहुत तुच्छ है; यदि आप urxvtअपनी मौजूदा urxvtविंडो के भीतर से चलते हैं, तो नई विंडो उसी डायरेक्टरी में होगी। मैंने इसी कारण से dupअलियास किया है urxvt &। यदि आप इसे हॉटकी से बांधना चाहते हैं, तो आप बैश की bindकमांड का उपयोग कर सकते हैं । उदाहरण के लिए, इसे बांधने के लिए F1:

$ bind '"\e[11~": "urxvt &\n"'

पारितोषिक के लिए धन्यवाद। मुझे पता था कि टर्मिनल चाइल्ड प्रॉसेस ने राज्य को बनाए रखा है, लेकिन मुझे नहीं पता था कि आप एक कमांड को बैश कर सकते हैं। मैं टर्मिनल को फोकस करने से बचने के लिए WM से ऐसा करना चाहूंगा।
लुका

मुझे वह पसंद है। कोई डिस्क नहीं लिखता है और केवल निष्पादन तब होता है जब आप नया टर्मिनल खोलने वाले होते हैं।
rozcietrzewiacz

केवल एक चीज जो मैं बदलूंगा, वह है ( urxvt & ) &>/dev/nullसिर्फ बैकग्राउंडिंग के बजाय उपयोग करना।
रोज़ज़ेट्रिएवेज़ेज़

यह समाधान महान और अधिक लचीला है, लेकिन मुझे 2 बाइंडिंग का उपयोग करना पसंद नहीं है, एक टर्मिनल को लॉन्च करने के लिए और एक नए कांटे के लिए।
लुका

4

बस एक ही सुविधा प्राप्त करने के लिए . /etc/profile.d/vte.shअपने में जोड़ें~/.bashrc


हालांकि, यह काम -1 क्यों परेशान करता है?
अब्दिल्लाह

यह काम करता है, और ऐसा लगता है कि यह वास्तव में gnome-
Ajax

4

बेशक यह cdव्यवहार को संशोधित करने के लिए एक कार्यशील दृष्टिकोण है , लेकिन मैं एक अधिक सरल समाधान दिखाना चाहूंगा। में आदमी पार्टी (1) मैंने पाया है कि अगर एक इंटरैक्टिव बाहर निकलता है इसे चलाता~/.bash_logout है, तो मौजूद है। इसलिए cdअंतिम पथ के हर आह्वान पर पथ को संचय करने के बजाय बाहर निकलने पर बचाया जा सकता है।

मेरा ~/.bash_logoutजीवन बहुत सरल है:

echo $PWD >~/.lastdir

और कहीं न कहीं .bashrcमैंने इस पंक्ति को रखा:

[ -r ~/.lastdir ] && cd $(<~/.lastdir)

1
बस ध्यान दें कि बाहर निकलने के .bash_logoutसमय ही login shellsदौड़ें, ऐसा हमेशा नहीं होता है।
हेनफ़ाइबर

1
वैकल्पिक रूप से, bashबाहर निकलने के साथ आखिरी रास्ता trap "echo $PWD > ~/.lastdir" EXIT"
बचाएं

@henfiber आपकी टिप्पणियों के लिए धन्यवाद! मुझे लगता है कि इस मामले में शेल एक लॉगिन शेल है, इसलिए यह ठीक से व्यवहार करेगा। दूसरी ओर trapदृष्टिकोण भी अच्छा है, मुझे यह पसंद है!
ट्रू यॉन

2

बहुत बार मैं एक साथ कई टर्मिनल विंडो का उपयोग करता हूं, प्रत्येक में कई टैब होते हैं। उदाहरण के लिए: स्रोत कोड विकास टैब के लिए एक विंडो, लेटेक्स फ़ाइलों के लिए एक विंडो, आर निष्पादन और स्क्रिप्टिंग के लिए एक विंडो, आदि। एक खिड़की के भीतर, मैं एक नया टैब्ड टर्मिनल निर्देशिका में बदलना चाहता हूं जो उस विशेष विंडो में अंतिम रूप से उपयोग किया जाता है (यह अतीत में काम करता था, लेकिन नए सूक्ति संस्करण के साथ, किसी तरह यह नहीं होता है)। निम्नलिखित गंदे समाधान मेरे लिए ठीक काम करता है। मैंने इसे .bashrc में डाल दिया है।

dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] &&  {
    savdir=`cat $dirfilename`
    cd "$savdir"
}

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}

यह एकदम सही है ... वाह! धन्यवाद। मैं हैकिंग बैश के बारे में बहुत कुछ नहीं जानता, लेकिन मैं पहले से ही इसे प्यार कर रहा हूं ...
apil.tamang
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.