मैक पर टर्मिनल सत्रों के बीच बैश इतिहास संरक्षित नहीं


33

मेरे बैश इतिहास ने रहस्यमय तरीके से काम करना बंद कर दिया है, और मुझे नहीं पता कि इसे कैसे ठीक किया जाए। यह मेरा .bashrc जैसा दिखता है:

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history

हालाँकि, जब मैं echo $HISTFILEइसे चलाता हूँ प्रिंट करता है /Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynew

मैं .bash_history फ़ाइल का स्वामी हूं, इसलिए मुझे यह सुनिश्चित नहीं है कि मैं इस समस्या को हल करने के बारे में कैसे जाऊंगा।

धन्यवाद!


हाय नेल्सन, सुपर यूजर का स्वागत है। त्वरित जाँच- क्या आपके द्वारा डाला गया स्थान खाली है?
बर्टिबेब

हाँ, वे थे, मैं उन्हें हटाकर वापस रिपोर्ट करूँगा।

@bertieb, मैंने रिक्त स्थान हटा दिए हैं और अब $ HISTFILESIZE ठीक से प्रतिध्वनित हो रहा है। हालाँकि, इतिहास सहेजा नहीं गया है और $ HISTFILE उस विषम अस्थायी इतिहास फ़ाइल को प्रिंट करता है (जिसे मैं स्टोर इतिहास केवल इस सत्र के लिए मान रहा हूं)।

क्या आप बदलने की कोशिश कर रहे हैं $HISTFILE, ब्याज से बाहर? मेरे पास .bashrcOSX नहीं है और echo $HISTFILEउस स्थान की रिपोर्ट करता हूं, जिसकी मुझे उम्मीद है- क्या प्रश्न में लाइनों पर टिप्पणी करने से कोई प्रभाव पड़ता है?
बर्टिबेब

1
हमेशा पथनाम चर चर का उद्धरण करें HISTFILE="$HOME/.bash_history”:। यदि आपके होम निर्देशिका में पथ में रिक्त स्थान (या संभवतः अन्य विशेष वर्ण) हैं, तो उद्धरण के बिना, आपका संस्करण अमान्य होगा।
क्रिस पेज

जवाबों:


26

टर्मिनल प्रत्येक टर्मिनल सत्र को एक विशिष्ट पहचानकर्ता प्रदान करता है और इसे TERM_SESSION_ID पर्यावरण चर के माध्यम से संप्रेषित करता है ताकि टर्मिनल में चलने वाले प्रोग्राम रिज्यूमे सक्षम होने के साथ टर्मिनल को छोड़ने और पुनः आरंभ करने पर एप्लिकेशन-विशिष्ट स्थिति को बचा सकें / पुनर्स्थापित कर सकें।

एक नया फ़ोल्डर (~ / .bash_session /) का उपयोग HISTFILE की .session फ़ाइलों को सत्रों के लिए अद्वितीय बनाने के लिए किया जाता है।

शेल स्टार्टअप के दौरान सत्र फ़ाइल निष्पादित की जाती है। पुरानी फाइलें समय-समय पर हटाई जाती हैं।

डिफ़ॉल्ट व्यवहार प्रत्येक बहाल टर्मिनल सत्र के लिए स्वतंत्र रूप से bash कमांड इतिहास को बचाने और पुनर्स्थापित करने की व्यवस्था करता है। यह नए सत्रों के लिए वैश्विक इतिहास में कमांड का विलय भी करता है।

आप इस व्यवहार को अक्षम कर सकते हैं और सेटिंग करके एकल इतिहास साझा कर सकते हैं

export SHELL_SESSION_HISTORY=0

यदि HISTTIMEFORMAT को परिभाषित किया जाता है, तो प्रति-सत्र इतिहास डिफ़ॉल्ट रूप से अक्षम होता है (/ / निजी / etc / bashrc_Apple_Terminal में अधिक पढ़ें)

यदि निम्न फ़ाइल मौजूद है, तो सहेजें / पुनर्स्थापना तंत्र अक्षम है:

~/.bash_sessions_disable

एल कैपिटन रिलीज के बाद से ऐप्पल ने पहले से ही कुछ व्यवहार को बदल दिया है, इसलिए यहां इस बारे में अधिक जाना बेहतर है less /private/etc/bashrc_Apple_Terminal


3
लेकिन सिर्फ सेव / रिस्टोर मैकेनिज्म को डिसेबल करके शुरू न करें। यदि आप शेल कमांड इतिहास के साथ समस्या कर रहे हैं, तो उस समस्या को हल करने का प्रयास करें। ~/.bash_sessions_disableफ़ाइल एक अंतिम उपाय के मामले में एक मुद्दा यह है कि विशेष रूप से हल नहीं किया जा सकता है वहाँ के रूप में होती है। यह प्रति-सत्र कमांड इतिहास से अधिक अक्षम करता है, और आप प्रति-सत्र कमांड इतिहास को अक्षम कर सकते हैं। /etc/bashrc_Apple_Terminalविवरण के लिए टिप्पणियों को देखें।
क्रिस पेज

1
@ क्रिसपीज दरअसल Apple ने स्क्रिप्ट के कुछ बिट्स को बदल दिया। अद्यतन उत्तर, धन्यवाद।
दिदीदीप

@diimdeep मैं इस लाइन को कहां जोड़ूंगा? export SHELL_SESSION_HISTORY=0
शून्यकाल

@zerohedge .bashrcऔर .bash_profile unix.stackexchange.com/a/310150/15362
diimdeep

@diimdeep धन्यवाद। यह अभी काम कर रहा है। क्या इसका कोई असर है?
शून्यकाल

6

एल कैपिटन अपग्रेड के बाद मैंने कुछ ऐसा ही देखा। बस .bash_sessions_disableअपने घर निर्देशिका में फ़ाइल फ़ाइल को जोड़ने से नए बैश सत्र अक्षम होते हैं और .bash_historyउपयोग में वापस आ जाता है।

इस Reddit थ्रेड में अधिक जानकारी और आगे लिंक हैं।


लेकिन सिर्फ सेव / रिस्टोर मैकेनिज्म को डिसेबल करके शुरू न करें। यदि आप शेल कमांड इतिहास के साथ समस्या कर रहे हैं, तो उस समस्या को हल करने का प्रयास करें। ~/.bash_sessions_disableफ़ाइल एक अंतिम उपाय के मामले में एक मुद्दा यह है कि विशेष रूप से हल नहीं किया जा सकता है वहाँ के रूप में होती है। यह प्रति-सत्र कमांड इतिहास से अधिक अक्षम करता है, और आप प्रति-सत्र कमांड इतिहास को अक्षम कर सकते हैं। /etc/bashrc_Apple_Terminalविवरण के लिए टिप्पणियों को देखें।
क्रिस पेज

धन्यवाद क्रिस - और क्या यह अक्षम करता है मेरा इतिहास पिछले कुछ महीनों से उम्मीद के मुताबिक काम कर रहा है (पिछले ओएक्सएक्स संस्करण और लिनक्स के समान)। पता नहीं उन्होंने इसे क्यों बदल दिया?
रब

@ अरब मैं SHELL_SESSION_HISTORY=0सबसे ऊपर जोड़ने का सुझाव दूंगा ~/.bash_profile
तीजय

5

आप नवीनतम आरवीएम संस्करण को अपडेट करके या इसे निष्पादित करके आरवीएम समस्या को हल कर सकते हैं:

  echo 'shell_session_update' > $HOME/.bash_logout

अधिक जानकारी के लिए https://github.com/rvm/rvm/issues/3540 देखें ।


1
आरवीएम को संशोधित किए बिना, अच्छा फिक्स।
mlo55

1
क्या हम रूबी एनवायरनमेंट मैनेजर (आरवीएम) rvm.io के बारे में बात कर रहे हैं ?? कब और क्यों शामिल होना चाहिए?
मार्कहु

3

Reddit थ्रेड के इस उत्तर ने मुझे बचाया:

यह शायद आरवीएम को चलाने के लिए bash_session के लिए निकास "हुक" को रोक रहा है। यदि आप अपने .bash_profile में निम्न पंक्ति बताते हैं, तो यह काम करना चाहिए।

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

यह वास्तव में मदद की!
करस्टेन

1

अगर यह एक मैक है, मुझे लगता है कि यह डिफ़ॉल्ट लॉगिन शेल है bashऔर इसके .profileबजाय चलता है .bashrc। तो, आप गलत फ़ाइल को संपादित कर रहे थे।


मैंने संपादन किया है। इसलिए यह मेरे .bashrc के समान है, और इतिहास अभी भी नहीं आया है।

@ नेल्सनियु क्या होता है जब आप $HISTFILEविभिन्न भागों में गूंजते हैं profile? हो सकता है कि आप एक और स्क्रिप्ट का स्रोत बनाते हैं जो परिवर्तनशील हो? मैं दोनों की जाँच की Terminalऔर iTerm, bash 3और 4 दोनों उनके डिफ़ॉल्ट है $HOME/.bash_history
थियोडेन

मैं प्रोफ़ाइल के विभिन्न हिस्सों में $ HISTFILE की प्रतिध्वनि कैसे करूंगा?

@NelsonLiu, क्या यह स्पष्ट नहीं है? जब $HISTFILEपरिवर्तन होता है तो आपका उद्देश्य ट्रैक करना है । इस प्रकार, बस echo $HISTFILEअपने कोड के चारों ओर दो बनाएं । आपको जो करना है वह कोड के टुकड़े को ढूंढना है जहां $HISTFILEदोनों echo $HISTFILEरेखाओं को एक-दूसरे के करीब और एक-दूसरे लाइन-बाय-लाइन से तब तक बदलता रहता है जब तक कि वह प्रकट न हो जाए। बस इतना ही।
थियोडेन

1
इसलिए मैंने जैसा आपने निर्देश दिया और प्रोफाइल के रूप में .bash_profile किया। मैंने echo $HISTFILEहर पंक्ति पर फैसला किया , बस यह देखने के लिए कि क्या कोई मतभेद थे। हालाँकि, यह केवल /Users/username/.bash_historyअसंख्य बार छपा । मैं फिर echo $HISTFILEशेल में भाग गया, और यह आउटपुट हुआ /Users/nelsonliu/.bash_sessions/CD275A29-1DF1-4ED8-B8CE-F706B11B812F.historynew

0

मैं हाई सिएरा पर इस समस्या को देख रहा था। किसी तरह, मेरे अपने .bash_history जड़ के स्वामित्व में हो गए थे और अन्य उपयोगकर्ताओं के लिए पढ़ने की अनुमति भी नहीं थी (जब घर निर्देशिका की सामग्री ls -al के साथ देखी गई थी)

इस .bash_history फ़ाइल में किसी भी परिणाम का कुछ भी नहीं था, इसलिए मैंने एक sudo rm .bash_history किया और उसके बाद एक टच .bash_history एक नया बनाने के लिए किया।

अभी सब ठीक लग रहा है


मेरे लिए, यह फ़ाइल की अनुमति नहीं थी, यह था कि मैंने किसी भी HIST नियंत्रण चर को परिभाषित नहीं किया था। जाहिर है उनमें से एक या अधिक परिभाषित किया जाना चाहिए। मैंने इसे अपनी ~/.bash_profileफ़ाइल में जोड़ा :export HISTTIMEFORMAT='%F %T '
MarkHu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.