Trova gli eseguibili associati alla Formula Homebrew

7

Alcune formule di Homebrew hanno nomi che non corrispondono a nessuno dei comandi installati (ad es. coreutils , speech-tools ), altre formule forniscono un comando che corrisponde al nome, ma ne fornisce anche altri (es. , lua ).

C'è un modo semplice per determinare quali comandi sono associati a una determinata formula? Idealmente come un comando di brew <arg> prima di installazione, ma anche uno script di shell che potrei usare dopo l'installazione sarebbe d'aiuto.

Ho pensato che potrei essere in grado di calcolare queste informazioni con un brew link --dry-run <formula> , ma questo in genere mi dà solo un avvertimento che la formula è già collegata (anche con --overwrite o --force aggiunto al comando). Non voglio dover disconnettere ogni volta che voglio vedere i comandi, quindi questa rotta non sembra utile.

    
posta SnoringFrog 03.09.2015 - 17:24
fonte

3 risposte

10

Come sottolinea la risposta di bmike , oltre a scavare nell'origine dei progetti per determinare quali eseguibili vengono installati, c'è non è un buon modo per determinare quali comandi hanno una determinata formula prima di installarla.

Dopo aver installato una formula, in esecuzione

brew unlink --dry-run formula | grep "$(brew --prefix)/bin"

è un'opzione praticabile ora che --dry-run è disponibile per brew unlink .

Prima che fosse aggiunto, ho scritto un comando esterno chiamato brew executables che ha ancora alcuni vantaggi rispetto a quanto sopra (principalmente nella formattazione e nella gestione alcuni collegamenti un po 'diversamente). Includerò una versione semplificata (e probabilmente non funzionante, a causa della mancanza di alcune assegnazioni di variabili) qui:

version_in_use=$(echo "$brew_info" | grep "$HOMEBREW_PREFIX.*\*$" | sed -e "s|.*$formula/\([^ ]*\).*||i")

cd "$HOMEBREW_CELLAR/$formula/$version_in_use" 
for dir in 'find . -type d -mindepth 1 -maxdepth 1 -name "bin"'; do
    for file in 'find "$dir" -type f -o -type l -perm +111'
    do
            filename=$(basename $file)
            echo $filename
    done        
done

In breve, estrae l'elenco di file eseguibili da $(brew --prefix)/$formula/$version_in_use/bin . La versione sul mio GitHub è un po 'più dettagliata, inclusa la possibilità aggiunta di identificare / indicare quando ci sono comandi che si collegano l'un l'altro in questa directory bin.

    
risposta data 03.09.2015 - 23:26
fonte
1

Ho scritto Homebrew-command-not-found per fare l'inverso: ottenere una formula da un eseguibile Non esiste un modo semplice per ottenere gli eseguibili di una formula come indicato da altre risposte; quindi ho installato tutte le formule Homebrew e ho registrato tutti gli eseguibili in un unico file.

Puoi trovarlo qui . Ogni formula ha una propria riga con il seguente formato:

<name>: <executable-1> <executable-2> <...>

È così facile come grep ^git: executables.txt ottenere gli eseguibili installati dalla formula git .

Il file viene aggiornato ogni giorno e copre i comandi 20k + per formule 5k + dal core e dai tocchi ufficiali. Si noti tuttavia che alcune formule installano diversi eseguibili quando si utilizzano opzioni specifiche; Non li supporto qui.

    
risposta data 27.10.2015 - 23:43
fonte
0

In generale - no.

Homebrew non installa le ricevute dei pacchetti, il modo in cui gli attuali strumenti decidono cosa installare in modo esauriente e corretto.

A volte puoi usare brew list per controllare le cose, ma ho trovato che il modo migliore per controllare l'homebrew è tramite github - che pubblica il codice sorgente per tutti gli strumenti e tutti i pacchetti.

Il mio motore di ricerca preferito ha persino! comandi per facilitare la ricerca in github:

!gh homebrew lua

Google fa un lavoro decente e classifica l'homebrew abbastanza alto e github

!g homebrew lua

Inoltre, brew info e brew home ti danno spesso un link diretto all'origine del progetto per verificare se i tuoi sospetti sono corretti. Come supposi, il vero controllo è disinstallare / reinstallare e guardare. Non divertente, ma efficace.

    
risposta data 03.09.2015 - 18:23
fonte

Leggi altre domande sui tag