Belirli komutlar için özel bir otomatik tamamlama nasıl belirtilir?


25

Sekmeyi iki katına çıkardığınızda bash öğesinin tam olarak neyi göstereceğini bilmesinin bir yolu var mı? Örneğin scpy, birkaç argüman gerektiren bir python betiğim var . Mesela apt-getçift ​​sekmesi size verirse

autoclean build-dep temiz dselect-yükseltme temizleme kaynak yükseltme
otomatik kontrol kontrol yükseltme yükseltme yükleme kaldır  

Bunu kendi komut dosyalarınız / programlarınız için yapmanın bir yolu var mı? Python betiğimi bir bash betiğine sarmam gerekir mi?

Yanıtlar:


31

Bunu yapmanın en kolay yolu, içine bir kabuk betiği eklemektir /etc/bash_completion.d/. Bu dosyanın temel yapısı, tamamlanmasını gerçekleştiren ve ardından completebir bash yerleşimi olan basit bir fonksiyondur . Nasıl kullanılacağına dair ayrıntılara girmek yerine complete, Bash Completion'a Bir Giriş bölümünü okumanızı öneririm . Kısım 1, temelleri kapsar ve Kısım 2, bir tamamlama komut dosyası yazma konusunda nasıl devam edeceğinizle ilgilidir.

Bash tamamlamanın daha ayrıntılı bir açıklaması ( man bash"/ Programlanabilir Tamamlama" yazabilirsiniz "ve" Hızlıca Tamamlama "bölümünde" Programlanabilir Tamamlama "bölümünde bulunabilir ve daha sonra hızlı bir şekilde oraya gitmek için birkaç kez 'n' tuşuna basın. 2140 İADE ").


8

İşte temel rehber.

Otomatik tamamlama çalışmasını istediğiniz admin.sh adında bir komut dosyası örneği verelim.

#!/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

Seçenek kısa listesini not edin. Bu seçeneğe sahip komut dosyası çağırmak, bu komut dosyası için olası tüm seçenekleri yazdıracaktır.

Ve burada otomatik tamamlama komut dosyası var:

_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

Tamamlanacak son argümanın, otomatik tamamlama eklemek istediğiniz komut dosyasının adı olduğunu unutmayın. Yapmanız gereken tek şey, otomatik tamamlama komut dosyanızı bashrc'ye eklemek

source /path/to/your/autocomplete.sh

veya /etc/bash.completion.d dosyasına kopyalayın.

Kaynak: /ubuntu//a/483149/24155


3
'tam öğretici' bunu tanımlamak için kullanacağım ifade değil ...
searchengine27
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.