Verifica se una gemma rubino è installata dallo script bash


14

Devo, da uno script bash, verificare se sono installate alcune gemme di Ruby.

Pensavo di poter fare qualcosa del genere

if ! gem list <name>; then do_stuff; fi

ma il test sulla riga di comando usando echo $?mostra che gem list <name>restituisce 0 indipendentemente dal fatto che il nome sia effettivamente trovato.

Questo significa che devo usare grep per filtrare l'output dell'elenco gemme o c'è un modo migliore che posso verificare per vedere se è installato un gem?

Risposte:


26

gem list <name> -irestituirà la stringa truese la gemma è installata e in caso falsecontrario. Inoltre, i codici di ritorno sono quelli che ti aspetteresti.

Per ulteriori informazioni, vedere gem help list.


Modifica: @Riateche ha correttamente osservato che ciò potrebbe dare falsi positivi se si cerca un nome gemma che è una sottostringa di una gemma altrimenti installata. Per evitare ciò, utilizzare una sintassi regex:

gem list '^<name>$' -i

(Esempio:) gem list '^mini$' -i.


1
Per verificare se è installata una versione specifica, basta aggiungere --version, ad esempio: gem list -i compass --version 0.12.4.
Moeffju,

6

Sembra che il gem speccomando fallirà con un errore se la gemma nominata non è installata. Così:

if ! gem spec <name> > /dev/null 2>&1; then
  echo "Gem <name> is not installed!"
fi

Non so se questo è il modo canonico di risolverlo, ma funziona.


3

È inoltre possibile utilizzare il querycomando secondario per il gemcomando.

$ gem query -i -n bundler 
true
estratto di utilizzo
$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -I                               Equivalent to --no-installed
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP

Cercherà anche versioni specifiche, usando l' -vinterruttore.

$ gem query -i -n bundler -v 1.6.2.1
false

1
Ci scusiamo per il downvote, ma come indicato nella pagina man per gem query: "Il comando query è la base per i comandi list e search. Dovresti invece usare i comandi list e search. Questo comando è troppo difficile da usare." ... non voglio creare cattive abitudini nella comunità SO! :-)
pvandenberk,
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.