Score:1

คำสั่งที่มีประโยชน์สำหรับแก้ไขคำสั่งที่พิมพ์ผิดที่ดำเนินการก่อนหน้านี้และเขียนทับรายการประวัติด้วยคำสั่งที่แก้ไขแล้ว

ธง za

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

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

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

zeko868 avatar
za flag
ขออภัย นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา แม้ว่าจะมีบางส่วนที่เป็นประโยชน์อยู่ในบางคำตอบ ฉันได้โพสต์คำตอบตามที่ฉันตั้งใจไว้และประกาศ นี่คือประวัติทั้งหมดที่ถูกลบ และฉันแค่ต้องการลบรายการสุดท้ายออกจากประวัติ - ควรทำการแก้ไขในโปรแกรมแก้ไขข้อความ เช่นเดียวกับกรณีที่ใช้คำสั่ง *fc*
Score:1
ธง za

โซลูชันนี้ดูเหมือนจะค่อนข้างดีสำหรับฉันหลังจากที่ฉันใช้มาระยะหนึ่งแล้ว

เพิ่มสิ่งต่อไปนี้ให้กับคุณ ~/.bashrc ไฟล์:

ช็อป - s histappend
PROMPT_COMMAND="ประวัติ -a; ประวัติ -c; ประวัติ -r; $PROMPT_COMMAND"
fc_override_prev_command_if_no_args() {
        ถ้า [ $# -eq 0 ]; แล้ว
                เอฟซี
                ประวัติ -d $(wc -l < ​​~/.bash_history)
                ประวัติศาสตร์ -w
                ประวัติศาสตร์ -ค
                ประวัติศาสตร์ -r
        อื่น
                เอฟซี$@
        ไฟ
}
นามแฝง fc=fc_override_prev_command_if_no_args

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

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

ส่วนที่มีการกำหนดตัวแปร PROMPT_COMMAND ใหม่ที่ฉันยืมมา ที่นี่ และฉันพบว่ามันมีประโยชน์เนื่องจากคำสั่งที่ส่งนั้นพร้อมใช้งานทันทีในประวัติ bash ของเทอร์มินัลอื่น ๆ ที่เปิดอยู่ในปัจจุบันด้วย bash (ตกลง ไม่ใช่ในทันที แต่แม้แต่การกระทำเช่นการส่ง ซิกท์ สัญญาณด้วย Ctrl+C ก็เพียงพอที่จะโหลดแคชประวัติซ้ำ)

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

เชื่อมโยงไปยัง ส่วนสำคัญ ด้วยตัวอย่างข้อมูลข้างต้น ที่นี่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา