ประวัติจะไม่ถูกสงวนไว้ใน zsh


17

เมื่อใดก็ตามที่ฉันเปิดอินสแตนซ์ใหม่ของเทอร์มินัลประวัติศาสตร์จะว่างเปล่า ทำไมถึงเป็นอย่างนั้น? ฉันจำเป็นต้องตั้งค่าบางอย่างหรือไม่? ในทุบตีไม่จำเป็นสำหรับสิ่งนี้แม้ว่า


ไม่แน่ใจzshแต่โดยค่าเริ่มต้นbashจะเขียนลงในไฟล์ประวัติของเขาเมื่อออกซึ่งหมายความว่าหากคุณไม่เคยใช้มาก่อนและเปิดเชลล์บางตัวพวกเขาทั้งหมดจะแสดงประวัติตอนนี้จนกว่าจะออกจากระบบอย่างน้อยหนึ่งครั้ง
DopeGhoti

คำตอบ:


25

Bash และ zsh มีค่าเริ่มต้นแตกต่างกัน Zsh ไม่ได้บันทึกประวัติลงในไฟล์โดยค่าเริ่มต้น

เมื่อคุณรัน zsh โดยไม่มีไฟล์กำหนดค่าจะแสดงอินเตอร์เฟสการกำหนดค่า ในอินเตอร์เฟสการกำหนดค่านี้เลือก

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

จากนั้นตรวจสอบการตั้งค่าที่เสนอและเลือก

# (0)  Remember edits and return to main menu (does not save file yet)

ทำซ้ำสำหรับเมนูย่อยอื่น ๆ สำหรับ (2) เสร็จสมบูรณ์, (3) ปุ่มลัดและตัวเลือก (4) จากนั้นเลือก

(0)  Exit, saving the new settings.  They will take effect immediately.

จากเมนูหลัก

การตั้งค่าที่เกี่ยวข้องกับประวัติที่แนะนำคือ

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

ฉันจะใช้ชื่ออื่นสำหรับไฟล์ประวัติเพื่อระบุว่าเป็นไฟล์ประวัติของ zsh และ 1,000 บรรทัดสามารถเพิ่มได้ในระบบที่ทันสมัย

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

เส้นเหล่านี้ไป~/.zshrcตามทาง


9

ในขณะที่คำตอบที่ถูกต้องที่มีอยู่ผมคิดว่ามันอาจจะมีมูลค่าเพิ่มว่ามีอาจจะเป็นตัวเลือกที่ดีกว่าสำหรับการบันทึกประวัติของคุณและนี่คือappendhistorySHARE_HISTORY

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

ดังนั้นคุณจะต้องตั้งค่าเป็นดังนี้:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY

1
+1 และยินดีต้อนรับสู่ U / L แต่โดยส่วนตัวแล้วฉันชอบINC_APPEND_HISTORY_TIMEซึ่งเขียนลงในประวัติจากเทอร์มินัลทั้งหมดข้างต้น แต่ประวัตินั้น "จะไม่สามารถใช้งานได้ทันทีจากอินสแตนซ์อื่นของเชลล์ที่ใช้ไฟล์ประวัติเดียวกัน" ทำให้ฉันมีเหตุผลมากกว่านี้เพราะจากนั้นฉันสามารถสำรวจประวัติศาสตร์ของแต่ละสถานีได้อย่างอิสระ แต่ก็ยังคงบันทึกไว้
Sparhawk

2
ขอบคุณ! ใช่มันยุติธรรมพอและฉันสามารถเห็นได้อย่างสมบูรณ์ว่าทำไมINC_APPEND_HISTORY_TIMEอาจสมเหตุสมผลมากกว่านี้ ฉันอาจไม่ควรพูดว่า "ดีกว่า" ฉันเดาว่ามันเป็นเรื่องของความชอบส่วนตัว ณ จุดนี้!
bert

0

เมื่อคุณเปลี่ยนจาก bash เป็น zsh เป็นครั้งแรกประวัติ bash ของคุณจะไม่ถูกนำไปใช้ ดังนั้นประวัติทั้งหมดที่คุณมีในการทุบตียังอยู่ในไฟล์ประวัติของการทุบตี zsh เริ่มเก็บประวัติตั้งแต่คุณเริ่มใช้มันเป็นเปลือกของคุณ

หากคุณไม่ได้ตั้งค่าให้เก็บประวัติคุณสามารถเรียกใช้วิซาร์ดการตั้งค่าอีกครั้งและบอก zsh ว่าจะบันทึกประวัติมากแค่ไหน เปลี่ยนชื่อของ ~ / .zshrc หรือลบออกเพื่อรับช็อตใหม่ที่วิซาร์ด


0

หากยังใช้งานไม่ได้และคุณมีทุกอย่างเรียบร้อยแล้วให้ลอง:

fc -W

ที่เขียนประวัติปัจจุบันไปยังไฟล์ประวัติ และถ้าคุณได้รับ:

zsh: locking failed for /home/username/.zsh_history: permission denied

จากนั้นก็ถึงเวลาที่จะตรวจสอบการอนุญาตในไฟล์และในไดเรกทอรีหลัก

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