หลังจากค้นหาความshopt -s histappend หมายของสิ่งนี้แล้วดูเหมือนว่าจะเป็นเรื่องที่มีสติมากและฉันก็ประหลาดใจที่มันไม่ได้เป็นค่าเริ่มต้น ทำไมทุกคนต้องการล้างประวัติของพวกเขาในแต่ละการออกจากเปลือก?
หลังจากค้นหาความshopt -s histappend หมายของสิ่งนี้แล้วดูเหมือนว่าจะเป็นเรื่องที่มีสติมากและฉันก็ประหลาดใจที่มันไม่ได้เป็นค่าเริ่มต้น ทำไมทุกคนต้องการล้างประวัติของพวกเขาในแต่ละการออกจากเปลือก?
คำตอบ:
ทีนี้เมื่อhistappendไม่ได้ตั้งค่านี่ไม่ได้หมายความว่าประวัติจะถูกลบในแต่ละการออกจากเชลล์ โดยไม่ต้องhistappendทุบตีอ่าน histfile เมื่อเริ่มต้นในหน่วยความจำ - ในระหว่างการดำเนินการรายการใหม่จะถูกเพิ่ม - และเมื่อออกจากเปลือกบรรทัด HISTSIZE ล่าสุดจะถูกเขียนไปยังไฟล์ประวัติโดยไม่ต้องต่อท้ายคือการแทนที่เนื้อหาก่อนหน้า
ตัวอย่างเช่นหาก histfile มี 400 รายการในระหว่างการเพิ่ม bash runtime 10 รายการใหม่ - histsize ถูกตั้งค่าเป็น 500 ดังนั้น histfile ใหม่จะมี 410 รายการ
พฤติกรรมนี้เป็นปัญหาเฉพาะเมื่อคุณใช้อินสแตนซ์ bash มากขึ้นแบบขนาน ในกรณีดังกล่าวไฟล์ประวัติจะมีเนื้อหาของเชลล์ที่มีอยู่เท่านั้น
เป็นอิสระจากสิ่งนี้: มีบางคนที่ต้องการล้างประวัติของพวกเขาเมื่อออกจากเชลล์เนื่องจากเหตุผลความเป็นส่วนตัว
histappendมีความเกี่ยวข้องกับrootประวัติของดิสก์หรือไม่ อีกครั้งก็จะมีผลต่อสิ่งที่ถูกเขียนไม่ถ้า
histappendเช่นเดียวกับHISTCONTROL=ignoredups:erasedups:ignorespaceที่ดูเหมือนว่าเริ่มต้นที่ดีสำหรับคนส่วนใหญ่
histappendไม่มีความหมายอะไรที่มีประสิทธิภาพถ้าฉันมีHISTFILESIZE=และHISTSIZE=ไม่มีที่สิ้นสุดในประวัติศาสตร์?
histappendประวัติใหม่จากการรันเชลล์พร้อมกันจะหายไปและจะบันทึกเฉพาะรายการของเชลล์ที่ออกล่าสุดเท่านั้น Btw ผมไม่ทราบว่ามีผลเช่นเดียวกับเชิงลบHISTSIZE= HISTSIZE
สำหรับความเข้ากันได้ในประวัติศาสตร์ฉันเดา ไม่มีhistappendตัวเลือกนี้จนกว่าจะทุบตี 2.0
histappendใช่เช่นเดียวกับตอนนี้ถ้าคุณไม่ได้ใช้
bash'บริสุทธิ์' หรือ.bashrcdistro สำหรับอดีต @Gilles น่าจะถูกต้อง ในความหมายหลัง-s histappendเป็นค่าเริ่มต้นเช่น Debian ตั้งแต่ปี 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459