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
risposta
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.
- 1. Per cambiare directory all'interno di uno script ruby?
- 2. Come distribuire il mio script Python/shell?
- 3. Gradle crea script di avvio duplicati nella directory bin
- 4. Cambia directory nella directory di uno script Python
- 5. Come installare mysql2 gem in Ruby 1.9.3? Funziona con 2.0.0
- 6. directory bin e PATH
- 7. Come chiamare uno script di shell e passare argomento da un altro script di shell
- 8. Run script di shell per ogni file nella directory
- 9. Cambiare la directory di script in homedir dell'utente in uno script di shell
- 10. Duplica AndroidManifest.xml nella directory bin?
- 11. Directory di modifica dello script della shell con variabile
- 12. Installare ruby gem globalmente dal repository github
- 13. Impossibile installare gem ruby-debug19 su win7 con ruby installato 1.9.2 e 1.9.3
- 14. Conteggiare file e directory utilizzando lo script di shell
- 15. Script di shell di origine in ambiente all'interno di uno script rubino
- 16. Impossibile installare pg gem in Mavericks con Postgres.app
- 17. Impossibile installare do_mysql gem?
- 18. Scrittura di uno script Fish Shell con un argomento facoltativo
- 19. Scala come uno script di shell: vasi sul classpath
- 20. Come installare ruby gem libxml senza 'extconf failure: need libxml2'
- 21. Come usare arricciatura in uno script di shell?
- 22. Ocra genera errori quando l'imballaggio uno script
- 23. Errore "PIP installare --upgrade distribuire"
- 24. Che cosa significa la riga "#!/Bin/sh" in uno script di shell UNIX?
- 25. Incorporamento awk in uno script di shell
- 26. restituisce lo stato di uno script di shell quando viene chiamato da ruby?
- 27. non può installare Gemcutter come fonte di Ruby Gem
- 28. Come eseguire uno script di shell interattivo usando java runtime?
- 29. Ruby Gem - LoadError
- 30. File AppConfig non trovato nella directory bin
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
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
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