Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีการสร้างลินุกซ์มาโครและการโยงปุ่มฟังก์ชันในไฟล์ .intputrc

Readline ยังให้ความสามารถในการแมปการโยงคีย์ที่คุณกำหนดเองได้ด้วยการแก้ไขไฟล์การกำหนดค่า .inputrc ในโฮมไดเร็กทอรีของคุณ

ต่อไปนี้คือการเชื่อมโยงคีย์ที่กำหนดเองสองประเภทที่คุณสามารถกำหนดได้:

  1. มาโคร
  2. ฟังก์ชัน

มาโคร

คุณสามารถกำหนดปุ่มลัดที่จะกรอกสตริงอักขระที่ตำแหน่งปัจจุบันของเคอร์เซอร์เมื่อดำเนินการ ในการดำเนินการนี้ ให้เพิ่มบรรทัดที่มีรูปแบบต่อไปนี้ลงในไฟล์ .inputrc config ของคุณ (หรือสร้างไฟล์หากยังไม่มี):

<key combination>: "<string of characters>"

ตัวอย่างเช่น สมมติว่าฉันพบว่าตัวเองเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ “~/debug_output.txt” ซ้ำๆ ฉันสามารถกำหนดมาโครใน .inputrc ของฉันโดยเพิ่มบรรทัดต่อไปนี้:

Control-g: " > ~/debug_output.txt"

ตอนนี้ เมื่อใดก็ตามที่ฉันพิมพ์คีย์ผสม Control-g คำสั่งเปลี่ยนเส้นทางจะถูกเพิ่มหลังเคอร์เซอร์ของฉัน ทำให้ฉันผนวกเข้ากับส่วนท้ายของคำสั่งอื่นๆ ได้อย่างง่ายดาย

โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อคุณสร้างมาโคร:

  • ฉันสามารถสะกดคีย์ผสมเป็นภาษาอังกฤษได้ (สำหรับข้อมูลเพิ่มเติม โปรดดูที่ man page สำหรับ bash ค้นหาส่วน "Readline Key Bindings")
  • ลำดับของอักขระที่จะแทรกโดยมาโครต้องอยู่ในเครื่องหมายคำพูดคู่ (“)
  • ตัวเลือกของ Control-g นั้นใช้ไม่ได้ผล คุณสามารถเลือกชุดค่าผสมที่มีความหมายกับคุณมากขึ้นได้
  • คุณสามารถแทนที่การโยงคีย์เริ่มต้นได้ (โปรดระลึกไว้เสมอว่าเมื่อคุณกำหนดคีย์เอง)
  • เพื่อให้การโยงคีย์มีผล คุณต้องเริ่มอินสแตนซ์เชลล์ใหม่ (ไฟล์ config .inputrc ถูกอ่านเมื่อเริ่มต้นเชลล์)

ฟังก์ชัน

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

<key combination>: <function-name>

สำหรับรายการฟังก์ชันที่กำหนดไว้ล่วงหน้าที่มีอยู่ โปรดดูคู่มือ GNU Readline

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

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

ลักษณะการทำงานเริ่มต้นสำหรับการเติมข้อความอัตโนมัติ (แมปกับคีย์ TAB) คือ:

  • กรอกคำสั่ง/ไดเรกทอรี/ชื่อไฟล์บางส่วนหากมีรายการที่ตรงกัน
  • แสดงรายการการแข่งขันที่เป็นไปได้เมื่อมีมากกว่า 1 รายการ

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

TAB: menu-complete

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

ในบทช่วยสอนนี้ เราได้เรียนรู้ว่าการโยงคีย์บรรทัดคำสั่งของ Linux นั้นขับเคลื่อนโดยเครื่องมือที่เรียกว่า Readline การโยงคีย์อาจเป็น 1 ใน 2 ประเภท:

  • มาโคร:ขยายลำดับอักขระ
  • ฟังก์ชัน:ดำเนินการ

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

bind -p