क्यों कोई 'हास्टपेंड' को बैश में सेट नहीं करेगा?


36

यह पता लगाने के बाद कि shopt -s histappend इसका क्या मतलब है , यह एक बहुत समझदार सेटिंग है, और मुझे आश्चर्य है कि यह डिफ़ॉल्ट नहीं है। कोई भी प्रत्येक शेल निकास पर अपने इतिहास को मिटा देना क्यों चाहेगा?


इस विकल्प की गलतफहमी से अलग - @maxscchlepzig द्वारा सही किया गया - "डिफ़ॉल्ट" में कम से कम दो स्रोत हैं: bash'शुद्ध' या डिस्ट्रो-आपूर्ति .bashrc। पूर्व के लिए, @ गिल्स शायद सही है। बाद के अर्थ में, -s histappend है : पर डिफ़ॉल्ट, जैसे, डेबियन, 2008 के बाद से bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d

3
ठीक है, यूनिक्स वास्तव में फलक चूक के लिए प्रसिद्ध नहीं है? मैं डिफ़ॉल्ट रूप से सबसे अमित्र चूक की उम्मीद करने के लिए आया हूं: P (मामूली अतिरंजित)
olejorgenb

जवाबों:


34

खैर, जब histappendसेट नहीं किया जाता है , तो इसका मतलब यह नहीं है कि प्रत्येक शेल निकास पर इतिहास मिटा दिया जाता है। बिना histappendबैश के हिस्टिफ़ाइल को स्टार्टअप पर मेमोरी में पढ़ा जाता है - ऑपरेशन के दौरान नई प्रविष्टियाँ जोड़ी जाती हैं - और शेल से बाहर निकलने के बाद पिछले HISTSIZE लाइनों को इतिहास फ़ाइल में बिना किसी अपॉइंटमेंट के लिखा जाता है, अर्थात पिछली सामग्री की जगह।

उदाहरण के लिए, यदि हिस्टफ़ाइल में 400 प्रविष्टियाँ होती हैं, तो बैश रनटाइम के दौरान 10 नई प्रविष्टियाँ जोड़ी जाती हैं - histize को 500 पर सेट किया जाता है, तो नए हिस्टफ़ाइल में 410 प्रविष्टियाँ होती हैं।

यह व्यवहार केवल समस्याग्रस्त है यदि आप समानांतर में अधिक बैश उदाहरणों का उपयोग करते हैं। उस स्थिति में, इतिहास फ़ाइल में केवल अंतिम निकास शेल की सामग्री होती है।

इससे स्वतंत्र: कुछ लोग हैं जो गोपनीयता कारणों की वजह से अपने इतिहास को खोल से बाहर निकालना चाहते हैं।


इसके अलावा, सुरक्षा कारणों से, रूट उपयोगकर्ता के लिए इतिहास को नहीं सहेजना एक अच्छा विचार हो सकता है। यह सुविधा रूट को शेल इतिहास के बिना डिस्क में सहेजे जाने की अनुमति देती है।
मेई

1
+1 के लिए "इसका मतलब यह नहीं है कि इतिहास प्रत्येक शेल निकास पर मिटा दिया गया है"। यह पूरी तरह से कहीं और अच्छी तरह से समझाया गया है - लेकिन शायद कुछ पाठकों तक पहुंचने के लिए पर्याप्त रूप से पर्याप्त नहीं है, खासकर विकल्प के नाम के संदर्भ में (ठीक है, मैं थोड़ी देर के लिए उन पाठकों में से एक हो सकता हूं)। @Mei, या तो क्रमपरिवर्तन की histappendकोई प्रासंगिकता है कि क्या rootइतिहास डिस्क तक पहुंचता है? फिर, यह केवल वही प्रभावित करता है जो लिखा जाता है, यदि नहीं ।
अंडरस्कोर_ड

5
किसी को भी 2 bash उदाहरण से कम चलता है? अधिकांश लोगों के लिए एक अच्छा डिफ़ॉल्ट histappendजैसा HISTCONTROL=ignoredups:erasedups:ignorespaceलगता है।
dashesy

है histappendप्रभावी व्यर्थ अगर मेरे पास है HISTFILESIZE=और HISTSIZE=अनंत इतिहास के लिए?
मार्क.2377

@ Marc.2377 नहीं, histappendसमवर्ती चलने वाले गोले से नए इतिहास के बिना तो खो जाएगा और केवल अंतिम निकास शेल की प्रविष्टियों को बचाया जाएगा। Btw, मुझे नहीं पता कि HISTSIZE=एक नकारात्मक के रूप में एक ही प्रभाव है HISTSIZE
मैक्सक्लेपजिग

9

ऐतिहासिक अनुकूलता के लिए, मुझे लगता है। histappendविकल्प बैश 2.0 जब तक मौजूद नहीं था।


1
क्या हर बार इतिहास लिखा गया था?
tshepang 4

3
@Tshepang: हाँ, अब तक अगर आप उपयोग नहीं करते हैं histappend
गिल्स एसओ- बुराई को रोकना '

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