मेरे मैक पर बैश इतिहास क्यों नहीं बचाएगा?


28

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

मुझे कैसे पता चलेगा कि क्या गलत हो रहा है? या रिक्त से सब कुछ फिर से सेट करें।


आपकी प्रोफ़ाइल या आरसी फ़ाइल हो सकती है। उनमें क्या है?
user14492

1
आपके .bash_history पर अनुमतियाँ और स्वामी क्या हैं? मेरा 600 है और मेरे स्वामित्व में है। इसके अलावा, $ HIST_FILE में क्या है?
BLM

@blm अनुमतियाँ सही हैं; $ HIST_FILE को प्रिंट करना मुझे .bash_session के बारे में पता चला । जाहिरा तौर पर समस्याएं हैं जब, एक सत्र के अंत में, ओएस उन फ़ाइल को इतिहास फ़ाइल में सहेजता है। मैं अब और जांच नहीं करना चाहता, इसलिए मैंने इसे केवल अपने घर में रखा है .bash_sessions_disableऔर इसे डिफ़ॉल्ट व्यवहार पर वापस जाना है
abaini01

कृपया Apple के साथ बग रिपोर्ट दर्ज करने पर विचार करें: developer.apple.com/bug-reporting
Chris Page

जवाबों:


31

इसे मैने किया है:

.bash_profileफ़ाइल के लिए एक चर जोड़ें

SHELL_SESSION_HISTORY=0

टर्मिनल को पुनरारंभ करें और उसके बाद यह काम कर रहा है जैसा मैं चाहता हूं। (मैंने टर्मिनल बंद करने के बाद कमांड को बचाया)

पुनश्च मैं HISTFILESIZEऔर HISTSIZEचर भी उपयोग करते हैं

HISTSIZE उन पंक्तियों या आदेशों की संख्या है जो एक इतिहास सूची में स्मृति में संग्रहीत हैं, जबकि आपका बैश सत्र चल रहा है।

HISTFILESIZE उन पंक्तियों या आदेशों की संख्या है जो (ए) सत्र के स्टार्टअप समय में इतिहास फ़ाइल में अनुमत हैं, और (b) भविष्य के सत्रों में उपयोग के लिए आपके बैश सत्र के अंत में इतिहास फ़ाइल में संग्रहीत हैं।


3
एल कैपिटन पर मेरे लिए यह एक पंक्ति जोड़ना ठीक काम करता है, धन्यवाद।
एडन

2
धन्यवाद! मुझे यह जानकर अच्छा लगेगा कि यह काम क्यों करता है, अगर कोई जानने के लिए भी होता है। (इतिहास = ०) मेरे अज्ञानी मन को लगा होगा कि सारा इतिहास खो जाएगा, फिर भी इसका विपरीत प्रभाव पड़ता है।)
माइक विलियमसन

@Sysqa वहाँ "बीच में कुछ" समाधान है? वह सुविधा जो "प्रत्येक बहाल टर्मिनल सत्र के लिए स्वतंत्र रूप से bash कमांड हिस्ट्री को सेव और रिस्टोर करती है" लगता है कि एक अच्छा फीचर कुछ प्रोग्राम को फायदा पहुंचा सकता है। क्या पिछले कॉन्फ़िगरेशन से लाभ और किसी तरह के कॉन्फ़िगरेशन के साथ नया भी है?
loco.loop

8

OS X 10.11 El Capitan में शुरू , सिस्टम-स्थापित स्क्रिप्ट /etc/bashrc_Apple_Terminalको फिर से शुरू करने के लिए बहाल प्रत्येक टर्मिनल के लिए अलग-अलग कमांड इतिहास को बचाने / पुनर्स्थापित करने के लिए टर्मिनल के साथ समन्वय करता है ।

/etc/bashrc_Apple_Terminalप्रति टर्मिनल कमांड इतिहास को कैसे प्रबंधित करता है और इसे कैसे अनुकूलित किया जाए, इसकी व्याख्या के लिए टिप्पणियों को पढ़ें ।

यदि आप अनुकूलित PROMPT_COMMANDकरते हैं तो पिछले मूल्य को समझना सुनिश्चित करें ताकि आप सिस्टम द्वारा प्रदत्त कमांड को मिटा न दें:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

यदि आप एक EXITसिग्नल हैंडलर स्थापित trapकरते हैं, तो कुछ ऐसा ही करना सुनिश्चित करें (या अपने हैंडलर से shell_session_update को कॉल करें यदि आप यह पता नहीं लगा सकते हैं कि पिछले मूल्य को कैसे संक्षिप्त किया जाए - यह थोड़ा सा शामिल है)।

जब आप शेल से बाहर निकलते हैं, तो यह कोड टर्मिनल के इतिहास में नए कमांड सेव करेगा ~/.bash_sessions। यह देखने के लिए कि क्या यह किसी समस्या का सामना करता है, टर्मिनल को बंद करने के बजाय शेल को मैन्युअल रूप से exit(या कंट्रोल-डी) के साथ छोड़ दें। यह प्रगति संदेशों को लॉग करता है। ध्यान दें कि यह पूरा नहीं होता है या यदि किसी प्रकार की चेतावनी या त्रुटि संदेश प्रदर्शित होते हैं।

सामान्य तौर पर, bashrc_Apple_Terminalप्रति-सत्र इतिहास का पता लगाने और उसे अक्षम करने का प्रयास अगर ऐसा लगता है कि उपयोगकर्ता ने कोई अनुकूलन किया है जो इसके अनुरूप नहीं है। ऐसा लगता है कि आपने इसे संभाल नहीं पाया है। कृपया Apple के साथ बग रिपोर्ट दर्ज करने पर विचार करें: https://developer.apple.com/bug-reporting/


मैंने कोई विशेष कॉन्फ़िगरेशन नहीं किया है, इसलिए मुझे लगता है कि यह समस्या नहीं है। क्या आप बता सकते हैं कि PROMPT_COMMAND क्या करता है।
loco.loop

@ loco.loop क्या आपका मतलब है "Bash के PROMPT_COMMAND चर के लिए क्या है?" या क्या आपका मतलब है " /etc/bashrc_Apple_TerminalPROMPT_COMMAND के लिए क्या उपयोग करता है ?" यदि बाद वाला, मैं आपको कोड का उल्लेख करता हूं, जिसे विस्तार से प्रलेखित किया गया है। या, आपको उसके बारे में एक और प्रश्नोत्तर शुरू करना चाहिए।
क्रिस पेज

मेरा मतलब है कि PROMPT_COMMAND किस लिए ... @ChrisPage
loco.loop

@ loco.loop मैं आपको बैश डॉक्यूमेंटेशन का संदर्भ देता हूं, या सुझाव देता हूं कि आप इसके बारे में प्रश्नोत्तर शुरू करें।
क्रिस पेज

6

अगर आप अपने में निम्नलिखित पंक्ति है देखने के लिए जाँच करें: बस के मामले में वहाँ दूसरों है कि RVM (रूबी संस्करण प्रबंधक) स्थापित कर रहे हैं ~/.profile, ~/.bashrcया ~/.bash_profileफ़ाइलें।

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

यह शायद आरवीएम को चलाने के लिए bash_session के लिए निकास "हुक" को रोक रहा है।

मेरे लिए यही समस्या थी। इसे टिप्पणी करके देखें।

स्रोत: रेडिट


3

मैक ओएस एक्स (10.13.6 पर अपडेट किया गया) की एक ताजा इंस्टॉलेशन पर, बैश कमांड हिस्ट्री सेव नहीं की जा रही थी। कोई .bashrc या .bash_profile फाइलें भी नहीं थीं। इस मामले में, बस एक खाली .bashrc फ़ाइल को जोड़ना मेरे लिए इसे ठीक कर दिया।

touch .bashrc

लगता है कि आप सभी की जरूरत है ...


Mojave / 10.14, भी :-) पर समस्या को ठीक करने के लिए लगता है
ssc

3

मैं एक नए स्थापित osx Mojave के साथ एक ही समस्या थी। मैंने अपनी ~/.bash_historyफ़ाइल चेक की और यह देखा:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

बस इसे वापस gilm को चाउ करने से समस्या हल हो गई। मैंनें इस्तेमाल किया:

sudo chown gilm /Users/gilm/.bash_history

और इससे मेरी समस्या हल हो गई।


2

आप .bash_logoutनिम्नलिखित के साथ एक फ़ाइल भी बना सकते हैं :

shell_session_update

GitHub टिप्पणी से शोक व्यक्त किया


या, मैन्युअल रूप से trap shell_session_update EXITएक बार टाइप करें , और लॉगआउट करें। /etc/bashrc_Apple_Terminalस्क्रिप्ट में ऐसे सुराग हैं जो यहां शामिल करने के लिए बहुत उबाऊ हैं।
MarkHu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.