C'è un modo per specificare che un particolare comando ha cassa insensibilità, senza accendere caso insensibilità globalmente (almeno per quel guscio)?Ambito caso-insensibilità per il completamento bash su base comando-by-comando
Nel mio caso particolare, ho una piccola applicazione che mi dà accesso alla linea di comando per un database di indirizzi e-mail, in modo da digitare:
db get email john smith
e torna indietro con l'indirizzo email di John Smith. Così sono riuscito a consentire il completamento in gran parte all'interno della app: impostazione
COMPREPLY=($(compgen -W "$(db --complete $COMP_CWORD "$COMP_WORDS[@]"}")" -- ${COMP_WORDS[COMP_CWORD]}))
lavora per me permettere alla scheda completa-get
e email
. Tuttavia, se si digita j<tab>
, rifiuta, perché nel database di posta elettronica, è correttamente in maiuscolo. Mi piacerebbe ottenere bash per completare questo comunque. (Se uso un capitale J
, funziona.)
In mancanza di questo, posso avere cambiare la mia opzione --complete
caso di risposta facendo corrispondere l'ingresso, suppongo, ma idealmente la riga di comando corrisponda al database se a tutto possibile
Si noti che ho questo lavoro all'interno della app quando si usa readline, è solo l'interfacciamento con bash che sembra essere un problema.
La soluzione di cui sopra non sembra essere del tutto corretto in quanto restituisce solo prima partita al posto di tutte le partite . rimuovere la "pausa" dovrebbe risolverlo. Un altro problema è che questo non funziona con garbo su versioni precedenti di bash che non hanno affatto l'opzione nocasematch. Non so quale sarebbe la soluzione migliore, ma ho usato il mio script locale SHOPT = $ (shopt -p) locale IGNORE_CASE = 0 [["$ {SHOPT # * shopt -u nocasematch} "==" $ SHOPT "]] || IGNORE_CASE = 1 – Neuron
Grazie, @Neuron: ho aggiornato il codice per restituire tutte le corrispondenze. Per quanto riguarda l'opzione 'nocasematch' non disponibile (sai in quale versione è stata introdotta?): Si potrebbe usare il test e poi, in assenza dell'opzione, applicare' tr [: upper:] [: lower :] 'tecnica nel corpo del ciclo' for'. Un modo un po 'più conciso di eseguire il test di opzione della disponibilità è: 'haveNoCaseMatch locale = 0 \ n [[-z "$ (shopt -q nocasematch 2> & 1)"]] && haveNoCaseMatch = 1 ' – mklement0
si dovrebbe scrivere che come COMPREPLY = ("$ {partite [@]}"), altrimenti si romperà le opzioni più parole (ad esempio, i nomi dei file) – Orwellophile