คำสั่งประวัติทำงานอย่างไร


8

เมื่อฉันพิมพ์คำสั่งใด ๆ ในเทอร์มินัลจะไม่ปรากฏใน~/.bash_historyไฟล์ของฉันจนกว่าฉันจะออกจากเซสชันของฉัน

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

~/.bash_historyไฟล์และhistoryคำสั่งของฉันจะซิงโครไนซ์ได้อย่างไร



"เมื่อฉันพิมพ์คำสั่งใด ๆ ในเทอร์มินัล" ไม่จริงจริง เมื่อคุณวางช่องว่างไว้ด้านหน้าของคำสั่งโดยค่าเริ่มต้นจะไม่บันทึกคำสั่งนั้น
Rinzwind

@Rinzwind พฤติกรรมการบันทึกคำสั่งแม้ว่าจะมีช่องว่างด้านหน้าสามารถเปลี่ยนได้โดยแก้ไขค่าของตัวแปรสภาพแวดล้อม HISTCONTROL ของคุณ
sys0dm1n

@ sys0dm1n "โดยค่าเริ่มต้น"
Rinzwind

คำตอบ:


10

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

เมื่อคุณปิดเทอร์มินัล bash เท่านั้นประวัติจะถูกผนวกเข้ากับ~/.bash_historyไฟล์ของคุณ


ตัวเลือกของhistory:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

ตัวเลือกสำหรับ~/.bashrcไฟล์

หากคุณต้องการเปลี่ยนพฤติกรรมนี้เพื่อให้บันทึกประวัติชั่วคราวเป็น~/.bash_historyโดยตรงหลังจากดำเนินการคำสั่งให้เพิ่มบรรทัดนี้:

PROMPT_COMMAND="history -a"

หากคุณต้องการให้ทุกเทอร์มินัลโหลด~/.bash_historyไฟล์โดยอัตโนมัติหลังจากดำเนินการคำสั่งทุกครั้งให้เพิ่มบรรทัดนี้แทน:

PROMPT_COMMAND="history -a; history -c; history -r"

หากคุณต้องการยกเว้นคำสั่งบางอย่าง (เช่นทุกอย่างที่ขึ้นต้นด้วยsudoและcat) ไม่ให้บันทึกให้เพิ่มบรรทัดนี้:

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