เมื่อใดก็ตามที่ฉันเปิดอินสแตนซ์ใหม่ของเทอร์มินัลประวัติศาสตร์จะว่างเปล่า ทำไมถึงเป็นอย่างนั้น? ฉันจำเป็นต้องตั้งค่าบางอย่างหรือไม่? ในทุบตีไม่จำเป็นสำหรับสิ่งนี้แม้ว่า
เมื่อใดก็ตามที่ฉันเปิดอินสแตนซ์ใหม่ของเทอร์มินัลประวัติศาสตร์จะว่างเปล่า ทำไมถึงเป็นอย่างนั้น? ฉันจำเป็นต้องตั้งค่าบางอย่างหรือไม่? ในทุบตีไม่จำเป็นสำหรับสิ่งนี้แม้ว่า
คำตอบ:
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
ตามทาง
ในขณะที่คำตอบที่ถูกต้องที่มีอยู่ผมคิดว่ามันอาจจะมีมูลค่าเพิ่มว่ามีอาจจะเป็นตัวเลือกที่ดีกว่าสำหรับการบันทึกประวัติของคุณและนี่คือappendhistory
SHARE_HISTORY
จากเอกสารSHARE_HISTORY
"ทั้งสองนำเข้าคำสั่งใหม่จากไฟล์ประวัติและทำให้คำสั่งที่พิมพ์ของคุณถูกผนวกเข้ากับไฟล์ประวัติ" ซึ่งหมายความว่าเชลล์รู้ถึงประวัติของกันและกันเช่นกันโดยไม่จำเป็นต้องปิดหนึ่งปัจจุบันหรือเปิดใหม่
ดังนั้นคุณจะต้องตั้งค่าเป็นดังนี้:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
ซึ่งเขียนลงในประวัติจากเทอร์มินัลทั้งหมดข้างต้น แต่ประวัตินั้น "จะไม่สามารถใช้งานได้ทันทีจากอินสแตนซ์อื่นของเชลล์ที่ใช้ไฟล์ประวัติเดียวกัน" ทำให้ฉันมีเหตุผลมากกว่านี้เพราะจากนั้นฉันสามารถสำรวจประวัติศาสตร์ของแต่ละสถานีได้อย่างอิสระ แต่ก็ยังคงบันทึกไว้
INC_APPEND_HISTORY_TIME
อาจสมเหตุสมผลมากกว่านี้ ฉันอาจไม่ควรพูดว่า "ดีกว่า" ฉันเดาว่ามันเป็นเรื่องของความชอบส่วนตัว ณ จุดนี้!
เมื่อคุณเปลี่ยนจาก bash เป็น zsh เป็นครั้งแรกประวัติ bash ของคุณจะไม่ถูกนำไปใช้ ดังนั้นประวัติทั้งหมดที่คุณมีในการทุบตียังอยู่ในไฟล์ประวัติของการทุบตี zsh เริ่มเก็บประวัติตั้งแต่คุณเริ่มใช้มันเป็นเปลือกของคุณ
หากคุณไม่ได้ตั้งค่าให้เก็บประวัติคุณสามารถเรียกใช้วิซาร์ดการตั้งค่าอีกครั้งและบอก zsh ว่าจะบันทึกประวัติมากแค่ไหน เปลี่ยนชื่อของ ~ / .zshrc หรือลบออกเพื่อรับช็อตใหม่ที่วิซาร์ด
หากยังใช้งานไม่ได้และคุณมีทุกอย่างเรียบร้อยแล้วให้ลอง:
fc -W
ที่เขียนประวัติปัจจุบันไปยังไฟล์ประวัติ และถ้าคุณได้รับ:
zsh: locking failed for /home/username/.zsh_history: permission denied
จากนั้นก็ถึงเวลาที่จะตรวจสอบการอนุญาตในไฟล์และในไดเรกทอรีหลัก
zsh
แต่โดยค่าเริ่มต้นbash
จะเขียนลงในไฟล์ประวัติของเขาเมื่อออกซึ่งหมายความว่าหากคุณไม่เคยใช้มาก่อนและเปิดเชลล์บางตัวพวกเขาทั้งหมดจะแสดงประวัติตอนนี้จนกว่าจะออกจากระบบอย่างน้อยหนึ่งครั้ง