ทำไมทุกคนไม่ตั้ง 'histappend' เป็น bash?


36

หลังจากค้นหาความshopt -s histappend หมายของสิ่งนี้แล้วดูเหมือนว่าจะเป็นเรื่องที่มีสติมากและฉันก็ประหลาดใจที่มันไม่ได้เป็นค่าเริ่มต้น ทำไมทุกคนต้องการล้างประวัติของพวกเขาในแต่ละการออกจากเปลือก?


นอกเหนือจากความเข้าใจผิดของสิ่งที่ตัวเลือกนี้จะให้ผู้อื่น - การแก้ไขโดย @maxscchlepzig - "เริ่มต้น" มีอย่างน้อยสองแหล่ง: bash'บริสุทธิ์' หรือ .bashrcdistro สำหรับอดีต @Gilles น่าจะถูกต้อง ในความหมายหลัง-s histappend เป็นค่าเริ่มต้นเช่น Debian ตั้งแต่ปี 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d

3
ทีนี้ยูนิกซ์ไม่ค่อยมีชื่อเสียงในเรื่องค่าเริ่มต้นที่ดี? ฉันคาดหวังว่าค่าเริ่มต้นที่ไม่เป็นมิตรที่สุดจะเป็นค่าเริ่มต้น: P (เล็กน้อยเกินจริง)
olejorgenb

คำตอบ:


34

ทีนี้เมื่อhistappendไม่ได้ตั้งค่านี่ไม่ได้หมายความว่าประวัติจะถูกลบในแต่ละการออกจากเชลล์ โดยไม่ต้องhistappendทุบตีอ่าน histfile เมื่อเริ่มต้นในหน่วยความจำ - ในระหว่างการดำเนินการรายการใหม่จะถูกเพิ่ม - และเมื่อออกจากเปลือกบรรทัด HISTSIZE ล่าสุดจะถูกเขียนไปยังไฟล์ประวัติโดยไม่ต้องต่อท้ายคือการแทนที่เนื้อหาก่อนหน้า

ตัวอย่างเช่นหาก histfile มี 400 รายการในระหว่างการเพิ่ม bash runtime 10 รายการใหม่ - histsize ถูกตั้งค่าเป็น 500 ดังนั้น histfile ใหม่จะมี 410 รายการ

พฤติกรรมนี้เป็นปัญหาเฉพาะเมื่อคุณใช้อินสแตนซ์ bash มากขึ้นแบบขนาน ในกรณีดังกล่าวไฟล์ประวัติจะมีเนื้อหาของเชลล์ที่มีอยู่เท่านั้น

เป็นอิสระจากสิ่งนี้: มีบางคนที่ต้องการล้างประวัติของพวกเขาเมื่อออกจากเชลล์เนื่องจากเหตุผลความเป็นส่วนตัว


นอกจากนี้เพื่อเหตุผลด้านความปลอดภัยคุณควรไม่บันทึกประวัติผู้ใช้รูท คุณลักษณะนี้อนุญาตให้รูทมีประวัติเชลล์โดยไม่ต้องบันทึกลงในดิสก์
เหม่ย

1
+1 สำหรับ "ไม่ได้หมายความว่าประวัติถูกลบทิ้งในแต่ละการออกจากเชลล์" นี่อธิบายได้อย่างสมบูรณ์ดีในที่อื่น ๆ - แต่อาจไม่รัดกุมพอที่จะเข้าถึงผู้อ่านบางคนโดยเฉพาะอย่างยิ่งในบริบทของชื่อตัวเลือก (ตกลงฉันอาจเป็นหนึ่งในผู้อ่านเหล่านั้นสักครู่) @Mei การสับเปลี่ยนของทั้งสองวิธีhistappendมีความเกี่ยวข้องกับrootประวัติของดิสก์หรือไม่ อีกครั้งก็จะมีผลต่อสิ่งที่ถูกเขียนไม่ถ้า
underscore_d

5
ไม่มีใครทำงานน้อยกว่า 2 bash อินสแตนซ์? histappendเช่นเดียวกับHISTCONTROL=ignoredups:erasedups:ignorespaceที่ดูเหมือนว่าเริ่มต้นที่ดีสำหรับคนส่วนใหญ่
dashesy

จะhistappendไม่มีความหมายอะไรที่มีประสิทธิภาพถ้าฉันมีHISTFILESIZE=และHISTSIZE=ไม่มีที่สิ้นสุดในประวัติศาสตร์?
Marc.2377

@ Marc.2377 ไม่โดยไม่ต้องมีhistappendประวัติใหม่จากการรันเชลล์พร้อมกันจะหายไปและจะบันทึกเฉพาะรายการของเชลล์ที่ออกล่าสุดเท่านั้น Btw ผมไม่ทราบว่ามีผลเช่นเดียวกับเชิงลบHISTSIZE= HISTSIZE
maxschlepzig

9

สำหรับความเข้ากันได้ในประวัติศาสตร์ฉันเดา ไม่มีhistappendตัวเลือกนี้จนกว่าจะทุบตี 2.0


1
ประวัติถูกเขียนทับทุกครั้งหรือไม่
tshepang

3
@Tshepang: histappendใช่เช่นเดียวกับตอนนี้ถ้าคุณไม่ได้ใช้
Gilles 'หยุดความชั่วร้าย'

มันควรจะเป็นค่าเริ่มต้นตอนนี้ แต่ไม่ใช่
dashesy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.