Come specificare un completamento automatico personalizzato per comandi specifici?


25

C'è un modo per fare in modo che bash sappia esattamente cosa visualizzare quando si raddoppia la scheda? Ad esempio ho uno script Python scpyche richiede un paio di argomenti. Ad esempio apt-get, se ti dà la doppia scheda

autoclean build-dep clean dselect-upgrade aggiorna la sorgente di spurgo
autoremove verifica dist-upgrade installa rimuovi aggiornamento  

C'è un modo per farlo per i tuoi script / programmi? Devo avvolgere il mio script Python in uno script bash?

Risposte:


31

Il modo più semplice per farlo è includere uno script di shell in /etc/bash_completion.d/. La struttura di base di questo file è una semplice funzione che esegue il completamento e quindi il richiamo del completequale è un built-in bash. Piuttosto che entrare nei dettagli su come usare complete, ti suggerisco di leggere An Introduction to Bash Completion . La parte 1 illustra le basi e la parte 2 spiega come procedere per scrivere uno script di completamento.

Una descrizione più densa del completamento bash può essere trovata nella sezione "Completamento programmabile" di man bash(puoi digitare "/ Completamento programmabile" e quindi premere 'n' alcune volte per arrivarci rapidamente. O, se ti senti fortunato, "g 2140 RITORNO ").


8

Ecco la guida di base.

Consente di avere un esempio di script chiamato admin.sh in cui si desidera far funzionare il completamento automatico.

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

Lista delle opzioni nota. La chiamata allo script con questa opzione stamperà tutte le opzioni possibili per questo script.

E qui hai lo script di completamento automatico:

_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

Si noti che l'ultimo argomento da completare è il nome dello script a cui si desidera aggiungere il completamento automatico. Tutto quello che devi fare è aggiungere il tuo script di completamento automatico a bashrc come

source /path/to/your/autocomplete.sh

o copiarlo su /etc/bash.completion.d

Fonte: /ubuntu//a/483149/24155


3
'tutorial completo' non è la frase che vorrei usare per descrivere questo ...
searchengine27
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.