จะระบุการเติมข้อความอัตโนมัติที่กำหนดเองสำหรับคำสั่งเฉพาะได้อย่างไร


25

มีวิธีทุบตีรู้ว่าสิ่งที่จะแสดงเมื่อคุณสองแท็บ? ตัวอย่างเช่นฉันมีสคริปต์หลามscpyซึ่งต้องใช้อาร์กิวเมนต์คู่ ตัวอย่างเช่นapt-getถ้าคุณสองแท็บให้คุณ

autoclean build-dep clean dselect-upgrade purge การอัพเกรดซอร์ส
autoremove check dist-upgrade install ลบการอัพเดท  

มีวิธีทำเช่นนั้นสำหรับสคริปต์ / โปรแกรมของคุณเองหรือไม่? ฉันจำเป็นต้องรวมสคริปต์ python ของฉันไว้ในสคริปต์ทุบตีหรือไม่?

คำตอบ:


31

/etc/bash_completion.d/วิธีที่ง่ายที่สุดของการทำเช่นนี้คือการรวมสคริปต์เปลือกใน โครงสร้างพื้นฐานของไฟล์นี้เป็นฟังก์ชั่นที่เรียบง่ายที่ดำเนินการเสร็จสิ้นแล้วภาวนาcompleteซึ่งเป็น bash ในตัว แทนที่จะไปลงรายละเอียดเกี่ยวกับวิธีการใช้completeผมขอแนะนำให้คุณอ่านบทนำทุบตีแล้วเสร็จ ส่วนที่ 1 ครอบคลุมพื้นฐานและส่วนที่ 2 อธิบายถึงวิธีการเขียนสคริปต์ที่สมบูรณ์

คุณสามารถดูคำอธิบายที่สมบูรณ์ของ bash completion ในส่วน "Programmable Completion" ของman bash(คุณสามารถพิมพ์ "/ Programmable Completion" แล้วกด 'n' สองสามครั้งเพื่อไปที่นั่นอย่างรวดเร็วหรือถ้าคุณรู้สึกโชค "g 2140 ผลตอบแทน ")


8

นี่คือคำแนะนำพื้นฐาน

ให้ตัวอย่างของสคริปต์ชื่อ admin.sh ซึ่งคุณต้องการให้การเติมข้อความอัตโนมัติทำงานได้

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

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

และที่นี่คุณมีสคริปต์เติมข้อความอัตโนมัติ:

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

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

source /path/to/your/autocomplete.sh

หรือคัดลอกไปที่ /etc/bash.completion.d

ที่มา: /ubuntu//a/483149/24155


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