Cosa sono quei comandi di sottolineatura?


10

Quando sono tab tab _al terminal, Bash suggerisce 206 possibilità. Ho provato a gestirne uno _git_rmma non è successo niente, cosa sono?

Ecco uno screenshot:

inserisci qui la descrizione dell'immagine


11
type _git_rmprobabilmente ti dirà che è una funzione. grep -R '_git_rm' /etc/bash_completion.d/lo troverà probabilmente. Tali funzioni sono generalmente quelle che forniscono i vari elenchi di bashcompletamento per il completamento.
arte

@manatwork, si prega di pubblicarlo come risposta.
derobert,

@derobert, intendevo solo fornire un rapido suggerimento, in modo che il proprietario della domanda ottenga qualcosa prima che la risposta dell'esperto venga pubblicata ~ 7 ore dopo.
arte

@manatwork La risposta è abbastanza per me ... Posso esplorare di più da solo: D Se non ti dispiace, accetterò la risposta di Gilles anche se penso che dovrei accettare la tua ..
disegna il

@draw, la risposta di Gilles è probabilmente basata sulla ricerca e sull'esperienza, mentre la mia si basa su osservazioni accidentali fatte durante la scansione delle directory. Per favore, accetta il suo.
arte

Risposte:


12

Queste funzioni il cui nome inizia con un trattino basso fanno parte del motore di completamento programmabile. Bash segue qui la convenzione di zsh, dove somecommandviene chiamata la funzione che genera i completamenti _somecommande se quella funzione richiede funzioni ausiliarie, vengono chiamate _somecommand_stuff.

Queste funzioni di completamento in genere non fanno nulla di utile o generano un errore se le chiamate manualmente: sono destinate a essere chiamate dal motore di completamento.

Ciò segue una pratica abbastanza diffusa in vari linguaggi di programmazione per utilizzare un carattere di sottolineatura iniziale per indicare che una funzione o una variabile è in qualche modo interna a una libreria e non destinata all'utente finale (o al programmatore finale).

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.