ประวัติ Bash ไม่ จำกัด [ปิด]


350

ฉันต้องการให้.bash_historyไฟล์ของฉันไม่ จำกัด เช่นดังนั้นฉันสามารถย้อนกลับไปและดูว่าฉันสร้าง / กำหนดค่าบางสิ่งหรือคำสั่งที่ดีหรือว่าคำสั่งบางคำสั่งทำลายบางสิ่งบางอย่างเมื่อหลายสัปดาห์ก่อน ฉันจะเปลี่ยนการตั้งค่านี้ได้อย่างไร



1
Bash เป็นภาษาการเขียนโปรแกรมและไม่เกี่ยวกับการเขียนโปรแกรม?
NeilG

คำตอบ:


307

ตั้งค่าHISTSIZEและHISTFILESIZEใน. bashrc เป็นสตริงว่าง:

HISTSIZE= 
HISTFILESIZE=

ในbash 4.3 และใหม่กว่าคุณสามารถใช้HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(ส่งออก PROMPT_COMMAND = 'history -a') สามารถล้างคำสั่งเพื่อทุบตีประวัติได้ทันที
cruelcage

3
การตั้งค่าHISTSIZE= HISTFILESIZE=ผลลัพธ์เป็นการปิดการใช้งานประวัติทุบตีอย่างสมบูรณ์อย่างน้อยสำหรับฉัน
Philipp Ludwig

5
@PhilippLudwig HISTSIZE=-1 HISTFILESIZE=-1ปิดการใช้งานประวัติของฉันในขณะที่HISTSIZE= HISTFILESIZE=ทำเคล็ดลับ CentOS 7 ที่นี่
Seether

1
@PhilippLudwig ฉันคิดว่าHISTSIZE= HISTFILESIZE=คุณน่าจะดีกว่าexport HISTSIZE= export HISTFILESIZE=
Matzz

3
@Seether คำตอบนั้นชัดเจน "ใน bash 4.3 ขึ้นไป ... " CentOS 7 มี bash 4.2.x
villapx

426

หลังจากการทำซ้ำขนาดใหญ่น่าเกลียดและคดีขอบแปลก ๆ ในช่วงหลายปีที่ผ่านมาตอนนี้ฉันมีส่วนที่กระชับของ. bashrc ของฉันที่อุทิศให้กับสิ่งนี้

ก่อนอื่นคุณต้องแสดงความคิดเห็นหรือลบส่วนนี้ของ. bashrc ของคุณ (ค่าเริ่มต้นสำหรับ Ubuntu) หากไม่เป็นเช่นนั้นสภาพแวดล้อมบางอย่าง (เช่นscreenเซสชันที่กำลังทำงาน) จะยังคงตัดทอนประวัติของคุณ:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

ขั้นที่สองเพิ่มส่วนนี้ลงที่ด้านล่างของ bashrc

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

หมายเหตุ: ทุกคำสั่งจะถูกเขียนทันทีหลังจากที่เรียกใช้ดังนั้นหากคุณวางรหัสผ่านโดยไม่ได้ตั้งใจคุณไม่สามารถเพียงแค่ "ฆ่า -9 %%" เพื่อหลีกเลี่ยงการเขียนประวัติคุณจะต้องลบมันออกด้วยตนเอง

นอกจากนี้โปรดทราบว่าแต่ละเซสชัน bash จะโหลดไฟล์ประวัติแบบเต็มในหน่วยความจำ แต่แม้ว่าไฟล์ประวัติของคุณจะเพิ่มขึ้นเป็น 10MB (ซึ่งจะใช้เวลานานนาน ) คุณจะไม่สังเกตเห็นผลกระทบใด ๆ ต่อเวลาเริ่มต้น bash ของคุณ


1
@AquariusPower - ลองทำตามขั้นตอนด้านบนสร้างHISTFILESIZE=และHISTSIZE=เว้นว่างไว้แทนที่จะเป็น -1 และตรวจสอบให้แน่ใจว่าคุณไม่มีการประกาศอื่น ๆ ของ params เหล่านั้นใน. bashrc หรือ. bash_profile หรือ. profile
fotinakis

2
ผู้ร้ายที่.bashrcฉันมีการติดตั้งหลังจากที่ไฟล์อื่นโหลดโดย. bashrc ... ตอนนี้ทำงาน! ขอบคุณ!
กุมภ์กุมภ์

10
เพิ่มในระบบทุบตีมาตรฐานของฉันและการเพิ่มประวัติปัจจุบันก็ดีดังนั้นหลังจากการตั้งค่าให้รันcat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meillaud

2
หากต้องการเก็บประวัติประวัติให้เริ่มต้นไฟล์ประวัติด้วยประวัติปัจจุบันของคุณ
Arthur

3
ขอบคุณมาก - ความจริงที่ว่าการตั้งค่าHISTFILESIZE(และอาจเป็นไปได้HISTSIZE) จะมีผลทันทีไม่สามารถเน้นมากเกินไปได้
Attie

37

ดังที่Jörg Beyer กล่าวถึงข้างต้นHISTSIZEและHISTFILESIZEเป็นกุญแจสำคัญ

นอกจากนี้คุณควรแน่นอนตรวจสอบตัวแปรสิ่งแวดล้อมHISTCONTROLซึ่งจะช่วยให้คุณทำสิ่งที่เย็นเช่นไม่เก็บคำสั่งประวัติศาสตร์ที่ซ้ำกัน ( HISTCONTROL=erasedups) ไม่มีจุดที่มีประวัติไม่ จำกัด หากคุณต้องค้นหาหลายร้อยบรรทัดcd ..หรือคล้ายกัน

ลิงค์: ที่นี่และการทำงานที่มีประวัติทุบตี ทุบตีตัวแปรคำถามที่พบบ่อยยังเป็นมูลค่าการท่อง


14
บรรทัดซีดีเหล่านั้นจะให้บริบทสำหรับคำสั่งที่ออกให้ พวกมันมีประโยชน์อย่างเหลือเชื่อจริงๆ ฉันไม่สามารถเข้าใจได้ว่าทำไมทุกคนถึงต้องการลบออกเว้นแต่ว่าวิธีเดียวที่คุณเคยใช้ประวัติคือการเพจโดยใช้คำสั่งทีละคำสั่ง
iconoclast

@simont ฉันยังใช้ตัวเลือก ignorespace กับ HISTCONTROL จากนั้นใช้สิ่งนี้กับทุกสิ่งที่ฉันไม่ต้องการให้เขียนลงในประวัติเช่นรหัสผ่าน
bigtunacan

6
การรักษาบรรทัดให้เป็นประโยชน์อย่างยิ่งถ้าคุณใช้ลำดับของคำสั่งซ้ำ เช่นsomecharsCtrl-r Ctrl-o Ctrl-o Ctrl-o Ctrl-oนั่นเป็นเหตุผลที่ฉันทำซ้ำในประวัติศาสตร์
Stéphane Gourichon

1
@ StéphaneGourichonมีCtrl-oไว้ทำอะไร?
Ciprian Tomoiagă

4
@ CiprianTomoiagă Ctrl-oรันคำสั่งที่พร้อมต์และแสดงคำสั่งทันทีหลังจากคำสั่งก่อนหน้านี้ในประวัติ ประโยชน์อย่างหนึ่งคือหลังจากใช้Ctrl-rเพื่อค้นหาคำสั่งเก่า (อาจใช้ลูกศรขึ้นและลงเพื่อย้ายไปยังคำสั่งที่อยู่ใกล้เคียงในประวัติศาสตร์) ก็เพียงพอแล้วที่จะCtrlกดและกดoหลาย ๆ ครั้งเพื่อเรียกใช้ชุดคำสั่งก่อนหน้านี้อีกครั้ง ถ้าคุณต้องการ. ดูGNU Readline - Wikipedia
Stéphane Gourichon

22

มี (อย่างน้อย) สอง env vars ที่เกี่ยวข้องที่นี่:

  • HISTSIZE: จำนวนรายการในไฟล์ประวัติ
  • HISTFILESIZE: จำนวนบรรทัดในไฟล์ประวัติ

ฉันคิดว่าเราสามารถยอมรับได้ว่าคำที่ไม่ จำกัดมักจะเหมือนกันมาก (หรือคุณมีที่เก็บไฟล์ไม่ จำกัด หรือไม่) ดังนั้นเพียงแค่ตั้งค่าที่มีขนาดใหญ่มาก


23
"ควรสังเกตว่า 1000000000 เท่ากับอินฟินิตี้สำหรับค่าอินฟินิตี้ที่น้อยมาก - sepp2k" lol ใช่ฉันเป็นเนื้อหาที่มีค่าไม่ จำกัด ขนาดเล็ก (พูดเดือนของการใช้สถานีบ่อย)
ฟรานซิสฮาร์ต

6
เดือนที่มีการใช้งานเครื่องบ่อยครั้งคือส่วนเล็ก ๆ ของอินฟินิตี้ ฉันจะบอกว่าอายุการใช้งานเทอร์มินัลบ่อยเท่ากับค่าน้อยมากของอินฟินิตี้ แต่อายุการใช้งานเทอร์มินัลบ่อยครั้งนั้นดีพอสำหรับประวัติเชลล์ ;)
iconoclast

2
zsh รุ่นเก่าอย่างน้อยจะมีปัญหาหากคุณตั้งค่า HISTSIZE และ / หรือ HISTFILESIZE ใหญ่เกินไปเนื่องจากพยายามจัดสรรหน่วยความจำล่วงหน้าให้เพียงพอ สิ่งนี้มีความเกี่ยวข้องเมื่อใช้เครื่องมือที่ใช้ zsh เป็นเชลล์ (ตัวอย่างเช่น dbx)
Brian Vandenberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.