วิธีการซิงค์ประวัติคำสั่งเซสชันเทอร์มินัลในทุบตี?


13

ฉันพยายามค้นหา~/.bash_historyคำสั่งล่าสุดของฉันขณะที่อยู่ในเซสชันเทอร์มินัล แต่พวกเขาไม่ได้อยู่ที่นั่น ฉันเดาว่าเป็นเพราะฉันเปิดเซสชันเทอร์มินัลหลายครั้ง

มีวิธีที่ฉันสามารถซิงค์ (เช่น sync-push หรือ sync-write-out) ประวัติคำสั่งของเทอร์มินัลเซสชันปัจจุบันลงในไฟล์ bash_history (โดยไม่ต้องปิดเซสชันและสูญเสียสภาพแวดล้อมนั้น) หรือไม่

(มันจะคล้ายกันในระยะไกลในความคิดกับวิธีที่syncคำสั่งเก็บการแก้ไขระบบไฟล์ในบางระบบ)

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


ฉันได้ลองใช้history -a คำสั่ง shell builtinแต่อย่างใดตอนนี้ฉันได้รับ 'สิทธิ์ปฏิเสธ' ใน.bash_historyไฟล์หลังจากนั้น
n611x007

คำตอบ:


19

เพิ่มบรรทัดนี้ไปที่.bashrc:

export PROMPT_COMMAND="history -a; history -n"

เปิดเทอร์มินัลใหม่และตรวจสอบ

คำอธิบาย

  • history -a ต่อท้ายบรรทัดประวัติใหม่ไปยังไฟล์ประวัติ
  • history -nบอกbashให้อ่านบรรทัดที่ไม่ได้อ่านจากไฟล์ประวัติไปยังรายการประวัติปัจจุบันของเซสชั่น
  • PROMPT_COMMAND: เนื้อหาของตัวแปรนี้ถูกเรียกใช้เป็นคำสั่งปกติก่อนbashแสดงพรอมต์ ดังนั้นทุกครั้งหลังจากที่คุณดำเนินการคำสั่งhistory -a; history -nจะถูกดำเนินการและbashประวัติของคุณจะถูกซิงค์

ขอบคุณ! ฉันไม่รู้ว่าทำไมฉันถึงได้รับอนุญาตปฏิเสธมาก่อน แต่ด้วยเทอร์มินัลใหม่ตอนนี้ดูเหมือนว่าจะทำงานได้ตามที่คาดไว้! ฉันเดาว่าปกติแล้วฉันควรจะสามารถใช้งานhistory -aในเทอร์มินัลด้วย bashrc ที่ไม่มีการแก้ไขได้เช่นกัน
n611x007

เมื่อใดที่ต้องเริ่มกังวลเกี่ยวกับผลกระทบด้านประสิทธิภาพของสิ่งนี้? (ฉันกำลังคิดเกี่ยวกับอุปกรณ์ต่ำสุดไม่แน่ใจว่าจะทำให้เกิดค่าใช้จ่ายมากแค่ไหน)
n611x007

1
นอกจากนี้คุณอาจมีพรอมต์คำสั่งอยู่แล้วในกรณีนี้มันจะดีกว่าถ้าใช้export PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

หาก${PROMPT_COMMAND}ว่างเปล่าสิ่งนี้จะทำให้เกิดข้อผิดพลาดเนื่องจากผู้นำ;
Boris Däppen

@ BorisDäppenถูกต้อง แต่วิธีนี้สามารถแก้ไขได้ง่ายexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.