จะหยุดทุบตีแก้ไขประวัติเมื่อฉันนำมาใช้ใหม่และแก้ไขรายการได้อย่างไร


20

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

มีคำถามเช่นนี้แต่ดูเหมือนว่าจะพูดถึงวิธีรับมือกับประวัติศาสตร์ที่ถูกแก้ไข ฉันเพิ่งเจออินสแตนซ์ของ bash ที่แก้ไขประวัติเมื่อคุณใช้คำสั่งซ้ำ - bash shell ก่อนหน้านี้ทั้งหมดที่ฉันเคยใช้มี (เท่าที่ฉันสังเกตเห็น) ได้รับการกำหนดค่าไม่ให้เปลี่ยนประวัติเมื่อคุณใช้ซ้ำ และแก้ไขคำสั่ง (บางทีฉันแค่ไม่ได้ให้ความสนใจอย่างถูกต้องกับประวัติเชลล์ของฉันในช่วง 15 ปีที่ผ่านมาหรือมากกว่านั้น ... )

ดังนั้นนั่นอาจเป็นคำถามที่ดีที่สุด: ฉันสามารถบอกทุบตีไม่เคยแก้ไขประวัติ - และถ้าเป็นเช่นนั้นได้อย่างไร


คุณสามารถใช้history -pเพื่อขยายประวัติโดยไม่ส่งผลกระทบต่อไฟล์ประวัติ คุณสามารถทำhistory -sเช่นเดียวกันและผนวกเข้ากับประวัติโดยไม่ต้องดำเนินการ คุณสามารถทำได้HISTIGNORE='start of a command I never want in history.*:command2.*'เพื่อไม่ให้มีคำสั่งบางอย่างอยู่ในประวัติ
mikeserv

1
ไม่ไม่ได้set revert-all-at-newline onในคำถามที่คุณเชื่อมโยงการแก้ปัญหาของคุณหรือไม่ คุณสามารถแสดงวิธีการทำให้เกิดปัญหาได้หรือไม่? โปรดทราบว่าคุณยังสามารถใช้zshสำหรับพฤติกรรมที่สอดคล้องกับสิ่งที่คุณต้องการมากขึ้น
Stéphane Chazelas

@mikeserv ดูหน้า man history -pเป็นสิ่งที่ฉันจะต้องทำสำหรับทุกคำสั่งที่ฉันต้องการนำมาใช้ใหม่ - ถูกต้องหรือไม่ ถ้าใช่นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ดังที่ได้กล่าวไปแล้วฉันได้ใช้อินสแตนซ์ของ bash ที่ไม่เคยแก้ไขประวัติเมื่อคำสั่งถูกนำมาใช้ซ้ำและแก้ไข
Richard Wiseman

@ StéphaneChazelasไม่ฉันไม่คิดว่าrevert-all-at-newlineเป็นสิ่งที่ฉันต้องการ หากฉันแก้ไขคำสั่งและกด CTRL-C เพื่อยกเลิกคำสั่งนั้นฉันไม่ต้องการให้มีผลกับประวัติ ฉันไม่เคยมีมาก่อนในการกำหนดค่าทุบตีไม่ให้แก้ไขประวัติซึ่งเป็นส่วนหนึ่งของเหตุผลที่ฉันสับสนว่าทำไมบางครั้งการติดตั้งใหม่มีพฤติกรรมในทางเดียวและบางครั้งในอื่น ๆ โดยวิธีการในอินสแตนซ์ที่ไม่ได้แก้ไขประวัติในการใช้คำสั่งนำมาใช้ใหม่bind -V | grep revertบ่งชี้ว่าrevert-all-at-newlineถูกตั้งค่าเป็น 'ปิด'
Richard Wiseman

2
bashจริงนี้มีน้อยมากจะทำอย่างไรกับ มันคือทั้งหมดที่เกี่ยวกับ readline มีการใช้งานที่แตกต่างกันของreadlineห้องสมุดและมันยังมีชุดการตั้งค่าของตัวเอง (มากของพวกเขา) และไฟล์การกำหนดค่าของตัวเอง ฉันไม่แน่ใจว่านี่เป็นการตั้งค่าหรือเป็นเพียงความแตกต่างในการติดตั้งใช้งาน แต่คุณควรค้นหาในเอกสารที่เกี่ยวข้องกับ readline ไม่ใช่การทุบตี
orion

คำตอบ:


9

ปรากฎrevert-all-at-newlineเป็นคำตอบ ฉันต้องการรวมset revert-all-at-newline onไว้ใน~/.inputrcไฟล์ของฉันเนื่องจากการใช้setคำสั่งที่พร้อมท์ bash ไม่มีผลกระทบ (แน่นอนว่าฉันต้องเริ่มเปลือกใหม่)

นอกจากนี้ยังพบว่า~/.inputrcมีการโหลดแทน /etc/inputrcถ้าปัจจุบันซึ่งหมายความว่าค่าเริ่มต้นใด ๆ ~/.inputrcที่กำหนดไว้ในสมัยที่ใช้งานไม่ได้เมื่อคุณสร้าง เพื่อแก้ไขปัญหานี้เริ่มต้นด้วย~/.inputrc$include /etc/inputrc

ขอบคุณ @ StéphaneChazelasที่ชี้ให้ฉันไปในทิศทางที่ถูกต้อง


0

ใน ~ / .bashrc คุณสามารถเพิ่ม

shopt -s histappend

ขอบคุณ แต่นั่นไม่ได้มีผลกระทบต่อปัญหาที่ฉันประสบ ฉันเพิ่งตรวจสอบและhistappendเปิดอยู่ แต่ประวัติของฉันยังคงแสดงการแก้ไขคำสั่งก่อนหน้า
Richard Wiseman

ฉันค้นหาหน้า bash man แล้วและฉันพบกฎสำหรับประวัติการแก้ไขชื่อคำสั่ง Readline มันเป็นคำอธิบายที่เป็นธรรม แต่ฉันไม่เห็นตัวเลือกสำหรับสิ่งที่คุณต้องการยกเว้นอาจจะ: redraw-current-line รีเฟรชปัจจุบัน เส้น
Jeff Coleman

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