.Bash_history में डुप्लिकेट प्रविष्टियों से कैसे बचें


108

मेरे इतिहास में वही कमान बार-बार सूचीबद्ध होती है। इससे कैसे बचा जा सकता है? मुझे पता है कि यह संभव है HISTCONTROLलेकिन मुझे सही रास्ता नहीं मिला।


मैंने एक संबंधित प्रश्न बनाया: askubuntu.com/questions/205520/… । इतिहास में डीप्स एक कमांड के संदर्भ को देखने के लिए उपयोगी है। जब आप इतिहास को प्रिंट करते हैं तो आप कभी-कभी डंप को छोड़ना चाहते हैं।
justingordon

जवाबों:


123

से bashआदमी पेज:

HISTCONTROL

इतिहास सूची में आदेशों को कैसे सहेजा जाता है इसे नियंत्रित करने वाले मूल्यों की एक बृहदान्त्र-पृथक सूची। यदि मानों की सूची में शामिल हैं ignorespace, तो जो लाइनें अंतरिक्ष चरित्र से शुरू होती हैं, वे इतिहास सूची में सहेजे नहीं जाते हैं। ignoredupsसहेजे न जाने के लिए पिछले इतिहास प्रविष्टि से मेल खाती लाइनों का कारण मान । मान ignorebothके लिए आशुलिपि है ignorespace और ignoredups। का एक मूल्यerasedupsउस लाइन को सहेजे जाने से पहले इतिहास की सूची से हटाए जाने वाली वर्तमान लाइन से मेल खाते सभी पिछली लाइनों का कारण बनता है। उपरोक्त सूची में किसी भी मूल्य को अनदेखा नहीं किया गया है। यदि HISTCONTROL असंगत है, या एक मान्य मान शामिल नहीं है, तो शेल पार्सर द्वारा पढ़ी गई सभी पंक्तियाँ इतिहास सूची में, HISTIGNORE के मूल्य के अधीन सहेजी जाती हैं। मल्टी-लाइन कंपाउंड कमांड की दूसरी और बाद की लाइनों का परीक्षण नहीं किया जाता है, और इतिहास में HISTCONTROL के मूल्य की परवाह किए बिना जोड़ा जाता है।

तो निम्नलिखित पंक्ति को अपने में रखें ~/.bashrc:

export HISTCONTROL=ignoreboth:erasedups


क्या आप चाहते हैं कि मैं HISTCONTROL = ignboth को ~ / .bashrc के निचले हिस्से में जोड़ूं?
karthick87

1
@ कर्क यह कोई फर्क नहीं पड़ता कि आप इसे कहाँ रखते हैं, हालांकि नीचे ठीक है।
यशायाह

Ubuntu 12.04 के अपने स्थापना पर मैं में इस संशोधन करना था ~/.bash_loginअधिकांश समय अगर .bashrc संशोधित किया गया है कि यह काम करेगा, लेकिन वह ऐसा नहीं है सब समय।
ck-

3
अपने बैश प्रोफाइल / source ~/.bashrc && source ~/.bash_profile
आरसी

23

इसे अपने में चिपकाएँ ~/.bashrc:

export HISTCONTROL=ignoredups

आप इसके बजाय उपयोग कर सकते हैं ignoreboth। यह इसे दोनों के लिए शॉर्टहैंड करता है ignorespaces(रिक्त स्थान से शुरू होने वाली कमांड) और ignoredups(डुप्लिकेट)।

ignoredupsजब मैं किसी वेबसाइट से कमांड को कॉपी करता हूं, तो मैं खुद ही पसंद कर लेता हूं क्योंकि सामने वाले स्पेस के साथ कमांड्स को नजरअंदाज करने का डिफॉल्ट व्यवहार मुझे परेशान करता है और यह बच नहीं पाता है क्योंकि मैं गलती से किसी स्पेस में कॉपी हो जाता हूं .... लेकिन प्रत्येक अपने।


3
अभी भी डुप्लिकेट मौजूद हैं। क्या समस्या हो सकती है ?? imgur.com/fXeLQ.png
karthick87

5
@ karthick87 एक अन्य उत्तर से उद्धृत किया गया है: पिछले इतिहास प्रविष्टि से मेल खाती रेखाओं के मूल्य को ignoredupsसहेजा नहीं जाना चाहिए । यह केवल लगातार समान रेखाओं को हटाता है।
AL

10

इसे डालने से ~/.bashrcअलग-अलग सत्रों में @ एल्विन का घोल wlell के रूप में लागू होगा

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

स्रोत: लिनक्स: बैश इतिहास: "अनदेखा" और "मिटा" सत्र के दौरान आम इतिहास के साथ संघर्ष की स्थापना


उसका उपयोग export HISTCONTROLऔर तुम्हारा क्यों नहीं करता है? क्या फर्क पड़ता है? यह मेरे लिए निर्यात के बिना काम कर रहा है, मैं बस उत्सुक हूं
felwithe

1
अच्छा प्रश्न! मैं इसका जवाब भी जानना चाहूंगा। सामान्य रूप exportसे उप-प्रक्रियाओं के लिए चर उपलब्ध करता है। stackoverflow.com/q/1158091/552621 , आदि के मामले में HISTCONTROL, PROMPT_COMMANDइन चरों का उपयोग शेल द्वारा ही किया जाता है, इसलिए शायद उन्हें निर्यात करना (बच्चों की प्रक्रियाओं के लिए) आवश्यक नहीं है।
नूर वुल्फ


3

निम्नलिखित को अपने में जोड़ें ~/.bashrc:

export HISTCONTROL=ignoredups

ऐसा करने के लिए, आप इस कमांड का उपयोग कर सकते हैं:

nano ~/.bashrc

0

हर नए आदेश को रिकॉर्ड करने के लिए मुश्किल है। सबसे पहले आपको ~/.profileया इसके समान जोड़ने की आवश्यकता है :

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

फिर आपको इसमें जोड़ना होगा ~/.bash_logout:

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