Ho bisogno di eseguire il bombardamento su un processo mentre si imposta una variabile di ambiente per esso. Ho provato questo one-liner:Shell fuori dal rubino durante l'impostazione di una variabile di ambiente
system "RBENV_VERSION=system ruby extconf.rb"
Questa sintassi funziona in script di shell, ma non da rubino. (Aggiornamento:. risulta questa sintassi funziona dal rubino, dopo tutto, ma non sono riuscito a vedere il suo effetto dovuto al mio particolare caso d'uso)
così sto facendo questo:
rbenv_version = ENV['RBENV_VERSION']
ENV['RBENV_VERSION'] = 'system'
begin
system "ruby extconf.rb"
ensure
ENV['RBENV_VERSION'] = rbenv_version
end
Sono costretto a un'espressione così lunga perché non voglio sovrascrivere la variabile di ambiente in modo permanente se ha già un valore.
Qualcosa di più breve che ti viene in mente?
You da man. \ o/ – mislav
Questa è un'ottima risposta. La documentazione per ['Kernel # system'] (http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-system) non è sufficientemente chiara su questa funzionalità. Molto bella. – Phrogz
Per Ruby 1.8, guarda POSIX :: Spawn di @ rtomayko, collegato in un altro commento. – alxndr