ฉันสนุกกับการใช้control+rเพื่อค้นหาประวัติคำสั่งของฉันซ้ำ ๆ ฉันพบตัวเลือกที่ดีบางอย่างที่ฉันชอบใช้กับมัน:
# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace
# keep the last 5000 entries
export HISTSIZE=5000
# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend
ปัญหาเดียวสำหรับฉันคือการerasedupsลบรายการที่ซ้ำกันตามลำดับเท่านั้นดังนั้นด้วยคำสั่งสตริงนี้:
ls
cd ~
ls
lsคำสั่งจริงจะถูกบันทึกไว้เป็นครั้งที่สอง ฉันคิดเกี่ยวกับการทำงานเป็นระยะ ๆ ด้วย:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
สิ่งนี้จะประสบความสำเร็จในการลบรายการที่ซ้ำกัน แต่น่าเสียดายที่คำสั่งจะไม่ถูกเก็บไว้ หากฉันไม่ได้sortไฟล์ก่อนฉันไม่เชื่อว่าuniqสามารถทำงานได้อย่างถูกต้อง
ฉันจะลบรายการที่ซ้ำกันใน. bash_history ของฉันเพื่อรักษาลำดับได้อย่างไร
สินเชื่อพิเศษ:
มีปัญหากับการเขียนทับ.bash_historyไฟล์ผ่านสคริปต์หรือไม่? ตัวอย่างเช่นหากคุณลบไฟล์บันทึก apache ฉันคิดว่าคุณจำเป็นต้องส่งสัญญาณ nohup / reset ด้วยkillเพื่อให้มันล้างมันเป็นการเชื่อมต่อกับไฟล์ หากเป็นกรณีของ.bash_historyไฟล์ฉันอาจใช้วิธีpsตรวจสอบและตรวจสอบให้แน่ใจว่าไม่มีเซสชันที่เชื่อมต่อก่อนที่สคริปต์การกรองจะทำงานหรือไม่
historyคำสั่ง ฉันควรมองหาที่ไหน
ignoredupsแทนerasedupsสักครู่แล้วดูว่ามันเหมาะกับคุณอย่างไร