मैं प्रति टैब / विंडो में एक अलग इतिहास रखने के लिए टर्मिनल कैसे प्राप्त कर सकता हूं?


13

जब मैं अपने मैक को पुनरारंभ करता हूं, तो यह प्रत्येक टैब के लिए बफ़र्स को ठीक से सहेजता है और सहेजता है, क्योंकि यह फिर से है जब कंप्यूटर वापस शुरू होता है। लेकिन कमांड इतिहास विंडो / टैब के अनुसार ठीक से बफर नहीं है। वे सभी एक ही बफर हैं।

मैं यह मान रहा हूँ क्योंकि बैश ~/.bash_historyसभी टर्मिनलों के लिए समान उपयोग करता है लेकिन क्या इसे सुधारने से बचने का कोई तरीका है ? बैश, या शायद टर्मिनल बनाने के लिए, उन्हें अलग से स्टोर करें?


कृपया इस पोस्ट को देखें @ सर्वर दोष, यह बताता है कि यह कैसे करना है।
म्यूटेंट

जवाबों:


7

आप अपने जीवन में कुछ ऐसा कर सकते हैं .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

यह आपके होम डायरेक्टरी में अलग-अलग हिस्ट्री फाइल्स बनाएगा जैसे कि .bash_history_ttys002। जब आप एक नई टर्मिनल विंडो बनाते हैं, तो यह tty नाम के अनुरूप इतिहास फ़ाइल का उपयोग करेगी, जो आमतौर पर उस क्रम से निर्धारित की जाएगी जिसमें आप टर्मिनल विंडो बनाते हैं।


बहुत धन्यवाद! इसे हल करते हुए चिह्नित करें। हालांकि यह इस बात पर निर्भर करता है कि OSX कैसे टर्मिनलों को लोड करता है जो मुझे लगता है कि यह निकटतम है जो हम प्राप्त कर सकते हैं।
रॉबर्ट स्कोल्ड

क्या यह भी संभव है प्रति टैब ??
जोशुआ मुहीम

प्रत्येक टैब एक अलग tty लॉगिन है, इसलिए इसे काम करना चाहिए।
सेठ नोबल

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

@ इसके साथ समस्या का समाधान यह है कि हर बार जब आप विंडो / टैब लॉन्च करते हैं तो सत्र अलग होता है। इसलिए यह अलग-अलग इतिहास बनाएगा और उन्हें सत्रों में लिंक नहीं करेगा।
रेने वोलेर

5

मैंने इसे जोड़कर लागू किया

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

मेरी ~/.bash_profileफाइल पर। अब जब मैं टर्मिनल बंद करता हूं और इसे फिर से खोलता हूं, तो प्रत्येक टैब का अपना अलग कमांड इतिहास बहाल होता है। जब मैं नया टैब बनाता हूं, तो डिफ़ॉल्ट इतिहास से आरंभ किया जाता है.bash_history

इसके अलावा, Terminalछोड़ दिया और पुनः आरंभ करने के बीच खुले टैब को संरक्षित करने के लिए ऐप बनाने के लिए आपको यह सुनिश्चित करने की आवश्यकता है कि विकल्प "close windows when quitting app" (on Yosemite)अक्षम है System Preferences -> General


0

आप प्रत्येक टर्मिनल उदाहरण के लिए एक कस्टम $ HISTFILE सेट कर सकते हैं।


क्या प्रत्येक टर्मिनल टैब / विंडो के लिए स्वचालित रूप से ऐसा करने का कोई तरीका है? और सुनिश्चित करें कि $HISTFILEजब कंप्यूटर बैक अप शुरू करता है, तो इसका उपयोग कर रहा है?
रॉबर्ट स्कोल्ड

1
हां, ऐसा करना संभव है, लेकिन फिर आप फिर से कैसे पहुंचेंगे? आपको पिछली इतिहास की फ़ाइलों को प्राप्त करने के लिए मैन्युअल रूप से फ़ाइलों को टटोलना होगा।
EmmEff

@EmmEff टर्मिनल में इस प्रकार के व्यवहार के लिए स्पष्ट समर्थन है: जब यह एक नया टर्मिनल बनाता है तो यह टर्मिनल को एक अद्वितीय आईडी प्रदान करता है और टर्मिनल सत्र के लिए TERM_SESSION_ID पर्यावरण चर के माध्यम से संचार करता है। जब यह फिर से शुरू करने के लिए एक टर्मिनल को पुनर्स्थापित करता है तो यह एक ही सत्र आईडी को भी पुनर्स्थापित करता है ताकि प्रोग्राम इसका उपयोग बहाल टर्मिनलों के साथ मनमाने ढंग से राज्य को जोड़ने के लिए कर सकें।
क्रिस पेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.