क्या मैं आसानी से कई स्क्रीन विंडो में अपना इतिहास खोज सकता हूं?


11

मेरे वर्तमान screenसत्र में इस पर 12 खुली खिड़कियां हैं। यह हफ्तों से चल रहा है ... मुझे पता है कि मैंने पिछले हफ्ते इन 12 स्क्रीन विंडो convertमें से किसी एक में ImageMagick कमांड को अंजाम दिया था ... क्या कोई रास्ता है जिससे मैं आसानी से सभी 12 उदाहरणों के बैश इतिहास के माध्यम से खोज कर सकता हूं, उन्हें बंद किए बिना या बिना चलाए history | grep convertसभी 12 स्क्रीन में?


1
मैं Zsh का उपयोग करें और मैं setopt share_historyमें /etc/zsh/zshrcपी: इस समस्या तो मेरे पास कभी नहीं होना चाहिए
phunehehe

जवाबों:


18

आप history -a; history -cइतिहास को बचाने के लिए सभी विंडो में चला सकते हैं । और फिर history -rइसे ताज़ा करने के लिए।

इसे और अधिक स्थायी रूप से हल करने के लिए इसे अपने में जोड़ें .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
यह बहुत अच्छा है, धन्यवाद! एकमात्र समस्या यह है कि यदि आप एक शेल में कुछ टाइप करते हैं और फिर दूसरे पर जाते हैं और तुरंत इतिहास टाइप करते हैं, तो यह इतिहास में दिखाई नहीं देगा। ऐसा इसलिए है क्योंकि PROMPT_COMMAND ने अभी तक निष्पादित नहीं किया है, इसलिए ताज़ा नहीं हुआ है। आपको पहले दूसरी विंडो में रिटर्न मारना होगा (या दूसरी कमांड रन करनी होगी), फिर इतिहास टाइप करें।
जावीद जमाते

1

मुश्किल लगता है। यहां कुछ तरीके दिए गए हैं जो आपके लिए काम कर सकते हैं।

यदि आपके पास लेखांकन उपकरण स्थापित हैं (लिनक्स पर, नामक एक पैकेज देखें acct) और उन्हें उपयोग करने की अनुमति है, तो आप यह पता लगा सकते हैं कि आप कब और किस टर्मिनल पर भागे हैं convert:

lastcomm convert

यदि यह अनुपलब्ध या असंबद्ध है, तो आप historyकमांड देखने के लिए बैश के प्रत्येक उदाहरण में एक कमांड निष्पादित कर सकते हैं convert। यह उन कमांड्स को खोजेगा जो इतिहास फ़ाइल में थे जब बैश शुरू हुआ।

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)आपकी स्क्रीन विंडो की संख्या पर पुनरावृत्त करता है। उन विंडो को छोड़ना सुनिश्चित करें जो वर्तमान में बैश नहीं चल रही हैं, लेकिन कुछ अन्य प्रक्रिया जो इनपुट की अलग-अलग व्याख्या करेगी।
  • screen -p $w stuff …निर्दिष्ट विंडो के इनपुट के रूप में निम्न स्ट्रिंग भेजता है। आपको स्ट्रिंग के अंत में न्यूलाइन की आवश्यकता है।
  • यदि आप विंडो 3 में भागते हैं तो फ़ाइल /tmp/convert.historyमें लाइनों की एक सूची होगी ।3 convert foo.jpgconvert foo.jpg

1
दुर्भाग्य से ये काम नहीं किया। :-( मैंने अभी-अभी history | grep convertसभी खिड़कियों में दौड़ना समाप्त किया । मैं निराश हूं, मैं गाइल्स द्वारा एक और महान उत्तर स्वीकार करना चाहता हूं!
जोश

1

tcsh आपको आवधिक उपनाम के उपयोग के माध्यम से सत्रों के बीच इतिहास साझा करने की अनुमति देता है।

आपकी .cshrc (या .tcshrc) फ़ाइल में:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

यह हर 60 मिनट में इतिहास कमांड को स्वचालित रूप से निष्पादित करेगा। यह आपके होम डायरेक्टरी में इतिहास को एक आम हिस्ट्री फाइल में सेव करेगा। इतिहास को अधिक बार अद्यतन करने के लिए, या तो टेपरोड संख्या को कम करें, या मैन्युअल रूप से ताज़ा करने के लिए "आवधिक" कमांड निष्पादित करें


0

बैश केवल इतिहास लिखता है जब वह बाहर निकलता है, जो इस समस्या को सबसे अच्छा बनाता है। मैंने सुना है कि zsh सक्रिय सत्रों के बीच इतिहास साझा कर सकता है।

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