จะป้องกันคำสั่งใน zshell ไม่ให้บันทึกลงในประวัติได้อย่างไร?


26

ใน Bash ฉันรู้ว่าการเว้นช่องว่างก่อนที่คำสั่งจะป้องกันไม่ให้มันถูกเก็บไว้ในประวัติศาสตร์สิ่งที่เทียบเท่ากับ zshell?


คำตอบ:


37

ใช้ตัวเลือก HIST_IGNORE_SPACE

setopt HIST_IGNORE_SPACE

ผู้ชาย

HIST_IGNORE_SPACE

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


ฉันหวังว่าฉันจะทำสิ่งนี้ได้สำหรับคำสั่งทั้งหมดที่พิมพ์ลงในเทอร์มินัลหน้าต่างตั้งแต่เปิดบน OSX เพราะเมื่อคุณรู้ว่าคุณกำลังเห่าต้นไม้ผิด
Dan Rosenstark

2
จากนั้นสำหรับคำสั่งที่ฉันต้องการป้องกันฉันใช้ชื่อแทนและนำหน้าช่องว่าง: alias jrnl = "jrnl"
Sagar Jauhari

2
@Yar kill -9 เชลล์นั้น (ถ้าไม่เขียนไฟล์ประวัติแบบต่อบรรทัด)
Michael Shigorin

1
@MichaelShigorin ขอบคุณ! kill -9 $$เป็นเรื่องที่ยอดเยี่ยมมากที่จะหลีกเลี่ยงคำสั่งทั้งหมดที่ออกในเซสชันเทอร์มินัลปัจจุบันเพื่อเก็บไว้ในประวัติ
Jeffrey Lebowski

2
@CMCDragonkai คุณทำได้unset HISTFILEก่อนบล็อกคำสั่งของคุณ คุณต้องรีเซ็ตในHISTFILEภายหลังหรือเปิดเชลล์ใหม่เพื่อเก็บคำสั่งในประวัติที่คุณต้องการ
Chauncey Garrett

2

หากคุณต้องการควบคุมสิ่งที่เพิ่มเข้ามาในประวัติ ZSH ให้ละเอียดยิ่งขึ้นคุณสามารถกำหนดzshaddhistoryฟังก์ชัน.zshrcได้ คำจำกัดความต่อไปนี้ใช้ regex เพื่อกำหนดรูปแบบที่จะละเว้น:

function zshaddhistory() {
  emulate -L zsh
  if ! [[ "$1" =~ "(^ |^ykchalresp|--password)" ]] ; then
      print -sr -- "${1%%$'\n'}"
      fc -p
  else
      return 1
  fi
}

โปรดทราบว่าพฤติกรรมจากman zshoptsภายใต้HIST_IGNORE_SPACEยังคงมีอยู่:

โปรดทราบว่าคำสั่งยังคงอยู่ในประวัติภายในจนกว่าคำสั่งถัดไปจะถูกป้อนก่อนที่มันจะหายไปทำให้คุณสามารถนำมาใช้ซ้ำหรือแก้ไขสั้น ๆ

[Enter]ดังนั้นเพื่อทดสอบว่าคุณจะต้องตีเป็นพิเศษ สิ่งนี้จะลบคำสั่งทั้งสองออกจากผลลัพธ์historyและประวัติลูกศร.

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