ด้วยเหตุผลบางอย่างฉันไม่สามารถทำให้ระบบเก็บประวัติ BASH ของฉันหลังจากรีบูตได้ นี่คือส่วนที่เกี่ยวข้องของฉัน~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
เท่าที่ฉันสามารถบอกได้ว่าสิ่งเหล่านี้เป็นตัวเลือกที่จำเป็นทั้งหมด (ฉันรู้ว่าฉันเคยสามารถเก็บประวัติในการรีบูตหลาย ๆ ครั้งโดยที่ไม่ต้องผ่านมาทั้งหมด) อย่างไรก็ตามแม้จะมีการเพิ่มตัวเลือกเหล่านี้หลายครั้งที่รีบูตที่ผ่านมาฉันยังหลวมประวัติส่วนใหญ่ของฉันหลังจากรีบูต มันไม่ได้ว่างเปล่า แต่มันไม่ได้มี 9999 บรรทัดก่อนที่จะรีบูต
ก่อนที่ใครจะบ่นใช่ฉันได้อ่านคำถามเหล่านี้แล้ว ฉันได้ดำเนินการตามคำแนะนำของพวกเขาตามที่ระบุไว้ข้างต้นส่วนที่เหลือไม่ช่วยเหลือหรือไม่เกี่ยวข้อง:
- Bash history loss เมื่อใช้ histappend
- วิธีการป้องกัน Bash จากการเปลี่ยนแปลงประวัติศาสตร์?
- อะไรเป็นตัวกำหนดว่าอะไรจะปรากฏในคำสั่ง bash history
- ฉันจะเก็บประวัติทุบตีของฉันไว้ตลอดเซสชันได้อย่างไร
- บันทึกประวัติทุบตีเป็นประจำ
ในโอกาสปิดว่าอาจจะมีคำสั่งอื่น ๆ ที่เกี่ยวข้องในการมีคุณสามารถดูทั้งหมดของฉันที่นี่~/.bashrc
แล้วฉันจะพลาดอะไร ทำไมประวัติของฉันถึงไม่ถูกบันทึก? หากใครคิดว่าไฟล์อื่นอาจมีความเกี่ยวข้องแจ้งให้เราทราบและฉันจะโพสต์มัน ฉันจะตรวจสอบโดยการทำงานgrep -i hist \.*
ในของฉัน$HOME
ซึ่งแสดงให้เห็นว่าเกี่ยวข้องเฉพาะ.
ไฟล์ที่มีสตริงhist
หรือเป็นHIST
.bashrc
ผมใช้ลินุกซ์มิ้นท์เดฉบับ GNU ทุบตี, รุ่น 4.2.36 (1) -release (x86_64-PC-ลินุกซ์ GNU) และจำลอง terminal ที่ชื่นชอบ (ในกรณีที่เกี่ยวข้อง) terminator
เป็น
UPDATE:
การติดตามคำแนะนำของ @ mpy ในความคิดเห็นฉันเปลี่ยน~/.bashrc
การตั้งค่าของฉันHISTFILE=~/bash_history
ซึ่งตรงข้ามกับค่าเริ่มต้น~/.bash_history
และดูเหมือนว่าจะแก้ปัญหาสำหรับเชลล์แบบโต้ตอบได้ เชลล์ล็อกอินยังคงแสดงลักษณะการทำงานเดียวกันโดยประวัติถูกตัดทอนที่500
บรรทัด อย่างไรก็ตามไม่มีการHIST
ตั้งค่าตัวแปรที่เกี่ยวข้องในไฟล์ที่เกี่ยวข้อง:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
ดังนั้นทำไมการตั้งค่าHISTSIZE
และHISTFILESIZE
ใน~/.bashrc
ไม่พอยกเว้นฉันตั้งอย่างชัดเจน$HISTFILE
เพื่อสิ่งอื่นที่ไม่ใช่ค่าเริ่มต้น~/.bash_history
?
history
คำสั่งเอาต์พุตที่คุณเห็นจะเหมือนกับสิ่งที่คุณเห็นรันอยู่cat .bash_history
นอกเหนือจากหมายเลขบรรทัด? ฉันหมายถึงการhistory
ประทับเวลารายการคำสั่งหรือข้อมูลอื่น ๆ หรือไม่? เหตุผลที่ฉันถามคือถ้าคุณเห็นสิ่งลึกลับเหล่านี้หมายความว่ามีอีกโมดูล / ฟังก์ชั่น / โปรแกรมซึ่งยุ่งกับประวัติเชลล์และรุ่นผิดหรือ buggy ของสิ่งที่มันอาจจะทำให้คุณเศร้าโศก .
;)
: ลองไฟล์อื่นเป็น HISTFILE ~/.bash_history
ไม่เริ่มต้น คำอธิบายที่สร้างขึ้นมาก: ฉันถือว่า bash เป็นเชลล์เริ่มต้นของคุณดังนั้นเมื่อระบบเริ่มเชลล์ที่ไม่ต้องมีการโต้ตอบเป็นพาเรนต์ของเซสชัน X ของคุณ (ฉันสมมติว่าคุณใช้ X) ซึ่งจะไม่รู้อะไรเลยเกี่ยวกับตัวเลือก histappend (เนื่องจาก. bashrc เท่านั้น อ่านโดยเชลล์อินเทอร์แอคทีฟ) ดังนั้นตราบใดที่พาเรนต์เชลล์นี้รันทุกอย่างเรียบร้อย แต่เมื่อมีการยกเลิก (เช่นระบบหยุด) มันจะแทนที่~/.bash_history
(ซึ่งเป็นค่าเริ่มต้น) และทำให้ประวัติของคุณ