Come eseguire l'output di stringhe su stdout?


15

Alcuni dei gitcomandi hanno molte opzioni e spesso sarebbe utile cercarli per quello di cui ho bisogno: stavo solo cercando l'opzione che controlla la TABlarghezza git-gui, ma ci sono circa 200 completamenti git config. Una soluzione ovvia è copiare tutti i completamenti in un editor e cercarli, ma preferirei farlo

[something] | grep tab

Non ci sono mano infopagine per compgen, help compgennon spiega nemmeno le proprie opzioni e non esiste un completamento automatico per compgen(come va per ironia?).

PS: compgen -Anon funziona.

PPS: Questa non è una domanda su git-gui: la soluzione alla domanda sulla larghezza della scheda era altrove.

PPPS: non si tratta di comandi di completamento automatico, ma solo di parametri di comando .


Questo è molto simile a Come convogliare l'output di "tab complete"? , ma la risposta accettata era specifica per il completamento dei comandi, non degli argomenti
Michael Mrozek

Risposte:


10

È possibile utilizzare la seguente funzione, che utilizza lo stesso modo sudoin cui il completamento automatico genera l'elenco di completamento:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

dove _command_offsetè definito in bash-completamento (pacchetto).

NOTA: la funzione deve essere eseguita in una shell interattiva (vale a dire se si trova in un file, è necessario eseguire il sourcing del file anziché semplicemente eseguirlo) oppure le regole / funzioni di completamento necessarie non saranno definite.

PS. compgen -Afunziona solo per le azioni integrate, ciò che avresti dovuto provare (ma non funziona neanche) è compgen -F(o effettivamente compgen -o bashdefault -o default -o nospace -F _git). Il motivo per cui questo non funziona (e doc per i comandi integrati di bash incluso compgen / complete) si trova in bash (1) .


@ l0b0 si spera funzioni in tutti i casi.
yuyichao,

Eccellente, funziona! Ho fatto un paio di modifiche minori e ora è nel mio .bash_aliases per sempre. Potresti voler potare, quindi rimane solo la soluzione, ma non c'è dubbio che otterrai la taglia. Rimuoverò i miei commenti di discussione poiché non sono più pertinenti.
l0b0

1
Ho scoperto che l'uso di questo nella shell interattiva può distruggere il completamento della scheda già in atto. Rendere ciascuna variabile locale alla funzione risolve quel problema. (es. local COMP_LINE="$*")
AL Flanagan,

@ALFlanagan Un buon punto. Aggiornato.
yuyichao,
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.