Emil Ong <onge / mcs.anl.gov> wrote:

> Does the Kernel exec method support passing environment
> variables?  Something akin to execve()?

It doesn't.  Kernel::syscall might be an alternative.

-----
% grep execve /usr/include/sys/syscall.h 
#define SYS_execve      59

% man execve
 ...
 int execve(const char *path, char *const argv[], char *const envp[])

----- ruby version -----
% cat ve.rb
print "FOO=",ENV['FOO']," BAR=",ENV['BAR'],"\n"

% cat sc.rb
path = "./ruby-1.6.4/ruby"
argv = [ "ruby", "ve.rb" ]
envp = [ "FOO=123", "BAR=456" ]
syscall( 59, path, argv.pack("p*"), envp.pack("p*") )

% ./ruby-1.6.4/ruby sc.rb
FOO=123 BAR=456

----- perl version -----
% cat ve.pl
print "FOO=",$ENV{'FOO'}," BAR=",$ENV{'BAR'},"\n";

% cat sc.pl
$path = "/usr/bin/perl";
@argv = ( "perl", "ve.pl" );
@envp = ( "FOO=123", "BAR=456" );
syscall( 59, $path, pack("p*", @argv), pack("p*", @envp) );

% perl sc.pl
FOO=123 BAR=456


-- 
Shusaku