คำสั่งเดียวกันแสดงอยู่ในประวัติของฉันซ้ำแล้วซ้ำอีก ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร ฉันรู้ว่าเป็นไปได้ผ่านทางHISTCONTROL
แต่ฉันไม่พบวิธีที่ถูกต้อง
คำสั่งเดียวกันแสดงอยู่ในประวัติของฉันซ้ำแล้วซ้ำอีก ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร ฉันรู้ว่าเป็นไปได้ผ่านทางHISTCONTROL
แต่ฉันไม่พบวิธีที่ถูกต้อง
คำตอบ:
จากbash
หน้าคน:
HISTCONTROL
รายการค่าที่คั่นด้วยโคลอนควบคุมวิธีบันทึกคำสั่งในรายการประวัติ หากรายการของค่ามีรวมอยู่
ignorespace
บรรทัดที่ขึ้นต้นด้วยอักขระเว้นวรรคจะไม่ถูกบันทึกในรายการประวัติ ค่าของignoredups
สาเหตุทำให้บรรทัดที่ตรงกับรายการประวัติก่อนหน้านี้ไม่ถูกบันทึก ค่าignoreboth
คือชวเลข และignorespace
ignoredups
ค่าของerasedups
ทำให้บรรทัดก่อนหน้าทั้งหมดที่ตรงกับบรรทัดปัจจุบันถูกลบออกจากรายการประวัติก่อนที่จะบันทึกบรรทัดนั้น ค่าใด ๆ ที่ไม่อยู่ในรายการด้านบนจะถูกละเว้น หาก HISTCONTROL ไม่ได้ตั้งค่าไว้หรือไม่รวมค่าที่ถูกต้องบรรทัดทั้งหมดที่อ่านโดยตัวแยกวิเคราะห์เชลล์จะถูกบันทึกในรายการประวัติโดยขึ้นอยู่กับค่าของ HISTIGNORE บรรทัดที่สองและต่อมาของคำสั่งผสมหลายบรรทัดจะไม่ถูกทดสอบและถูกเพิ่มในประวัติโดยไม่คำนึงถึงค่าของ HISTCONTROL
ดังนั้นใส่บรรทัดต่อไปนี้ในของคุณ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
เกือบตลอดเวลามันจะทำงานถ้า. bashrc มีการปรับเปลี่ยน แต่นั่นไม่ใช่กรณีตลอดเวลา
source ~/.bashrc && source ~/.bash_profile
ติดสิ่งนี้ในของคุณ~/.bashrc
:
export HISTCONTROL=ignoredups
ignoreboth
คุณสามารถใช้แทน มันเป็นการย่อทั้งignorespaces
(คำสั่งที่ขึ้นต้นด้วยช่องว่าง) และignoredups
(ซ้ำกัน)
ฉันชอบignoredups
ด้วยตัวเองเพราะฉันพบว่าพฤติกรรมเริ่มต้นของการเพิกเฉยคำสั่งที่มีช่องว่างด้านหน้าค่อนข้างน่ารำคาญเมื่อฉันคัดลอกคำสั่งออกจากเว็บไซต์และมันไม่ได้รับการบันทึกเพราะฉันตั้งใจคัดลอกในพื้นที่เกินไป .... แต่ แต่ละของพวกเขาเอง
ignoredups
เส้นสาเหตุที่ตรงกับรายการก่อนประวัติศาสตร์ที่จะไม่ถูกบันทึกไว้ มันจะลบเส้นที่เหมือนกันตามลำดับเท่านั้น
การใส่สิ่งนี้ลงใน~/.bashrc
จะใช้โซลูชันของ @ alvin ในเซสชันต่างๆเป็น wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
แหล่งที่มา: Linux: ประวัติทุบตี:“ การเพิกเฉย” และ“ การลบ” การตั้งค่าขัดแย้งกับประวัติทั่วไปทั่วเซสชัน
export HISTCONTROL
และของคุณไม่ถึง ความแตกต่างคืออะไร? มันทำงานสำหรับฉันโดยไม่ส่งออกฉันแค่อยากรู้อยากเห็น
export
ทำให้ตัวแปรพร้อมใช้งานสำหรับกระบวนการย่อย stackoverflow.com/q/1158091/552621ในกรณีของHISTCONTROL
, PROMPT_COMMAND
ฯลฯ ตัวแปรเหล่านี้ถูกใช้โดยเชลล์เองดังนั้นอาจจะไม่จำเป็นต้องเอ็กซ์พอร์ตพวกมัน (ไปยังกระบวนการลูก)
export HISTCONTROL=erasedups
เพิ่มสิ่งต่อไปนี้ในของคุณ~/.bashrc
:
export HISTCONTROL=ignoredups
หากต้องการทำสิ่งนี้คุณสามารถใช้คำสั่งนี้:
nano ~/.bashrc
ในการบันทึกคำสั่งใหม่ทุกคำสั่งนั้นไม่ยุ่งยาก ก่อนอื่นคุณต้องเพิ่ม
~/.profile
หรือคล้ายกัน:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
จากนั้นคุณต้องเพิ่มใน~/.bash_logout
:
history -a
history -w