2014-05-16 9 views
5

Desidero inserire uno script di shell nella directory bin del mio gem, insieme ad altri programmi Ruby che appartengono al pacchetto. Vorrei avere questo script di shell installato nella directory bin così com'è (cioè senza wrapper). È possibile ciò con le gemme Ruby? Sarei felice con i ganci post-installazione, se non altrimenti possibile. Qualcuno ha qualche esperienza con questo?Distribuire uno script di shell con Ruby gem e installare nella directory bin

+1

Cosa hai provato? Questo dovrebbe funzionare per quanto ne so. Potrebbe essere applicato un wrapper, ma non dovrebbe essere un grosso problema. Per lo più cose come 'bundle exec' funzioneranno correttamente. – tadman

+0

Sfortunatamente, questo è un problema. Il wrapper è uno script ruby ​​che tenta di caricare il mio script di shell ed eseguirlo come un programma Ruby. Ovviamente barfs quando si incontra la sintassi di bash. – scientistician

+0

Se stai scrivendo una gemma Ruby, devi attenersi alle convenzioni che impone. Uno di questi è l'aspettativa che i tuoi script siano compatibili con la versione di Ruby selezionata dall'utente. Se hai bisogno di eseguire uno script di shell, puoi sempre usare 'exec' per convertire il tuo processo Ruby in uno script bash con gli stessi argomenti. – tadman

risposta

4

Questo problema è descritto qui: https://github.com/rubygems/rubygems/issues/88

Se la gemma si sta sviluppando è destinato esclusivamente per uso personale, si può semplicemente installarlo con

gem install --no-wrapper my_gem 

Credo che faresti meglio scrivi uno script ruby ​​che esegue il tuo script bash. Ecco un esempio su come farlo:


bin/test_gem

#!/usr/bin/env ruby 

bin_dir = File.expand_path(File.dirname(__FILE__)) 
shell_script_path = File.join(bin_dir, 'test_gem.sh') 

`#{shell_script_path}` 

bin/test_gem.sh

#!/bin/sh 

echo "Hello World!" 

test_gem.gemspec

spec.files = [ 
    # ... 
    'bin/test_gem', 'bin/test_gem.sh' 
] 

# ... 

spec.executables = ['test_gem'] 

NOTA: Non dimenticare di impostare entrambi i file nella cartella bin a eseguibile!

Nota che mentre test_gem.sh è registrato con il comando files Rubygems, non è registrata come executables: sarà solo essere messo in dir della gemma installato ma non avvolto/spessorato.

Se si installa la gemma (ed è possibile eseguire rbenv rehash se necessario), chiamando lo test_gem verrà generato lo script ruby ​​che esegue lo script della shell.

Problemi correlati