Bug #8004

Open3 not finding binaries when PATH env var is passed as first arg

Added by Josh Cheek about 1 year ago. Updated about 1 year ago.

[ruby-core:53103]
Status:Open
Priority:Normal
Assignee:-
Category:-
Target version:-
ruby -v:ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0] Backport:

Description

=begin
#!/bin/sh

# make an executable
echo '#!/usr/bin/env ruby' > mybin
echo 'puts "omg"' >> my
bin
chmod +x my_bin

# run it in 1.9
ruby1.9 -v
# >> ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.0]

ruby1.9 -r open3 -e 'p Open3.capture3({"PATH" => ".:#{ENV["PATH"]}"}, "my_bin")'
# >> ["omg\n", "", #]

# run it in 2.0
ruby2 -v
# >> ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]

ruby2 -r open3 -e 'p Open3.capture3({"PATH" => ".:#{ENV["PATH"]}"}, "mybin")'
# >> /Users/joshcheek/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/open3.rb:211:in spawn': No such file or directory - my_bin (Errno::ENOENT)
# >> from /Users/joshcheek/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/open3.rb:211:in
popen
run'
# >> from /Users/joshcheek/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/open3.rb:99:in popen3'
# >> from /Users/joshcheek/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/open3.rb:279:in
capture3'
# >> from -e:1:in `'

# the above fails, but this one works
ruby2 -r open3 -e 'ENV["PATH"] = ".:#{ENV["PATH"]}"; p Open3.capture3("my_bin")'
# >> ["omg\n", "", #]

# it is setting the path, though, so idk what the problem is
ruby2 -r open3 -e 'p Open3.capture3({"PATH" => ".:#{ENV["PATH"]}"}, "echo $PATH")'
# >> [".:/Users/joshcheek/.rbenv/shims: ...
=end

History

#1 Updated by Josh Cheek about 1 year ago

=begin
Did some more digging, it seems to be a bug in Process.spawn:

#!/bin/sh

cat script.rb
# >> File.write 'mybin', 'echo "WORKS"'
# >> File.chmod 0755, 'my
bin'
# >>
# >> puts "CWD: #{Dir.pwd}"
# >> Process.spawn({'PATH' => ".:#{ENV['PATH']}"}, 'my_bin')

ruby1.9 -v
# >> ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.0]
ruby1.9 script.rb
# >> CWD: /Users/joshcheek/deleteme/ruby2-bug-test
# >> WORKS

ruby2 -v
# >> ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]

ruby2 script.rb
# >> CWD: /Users/joshcheek/deleteme/ruby2-bug-test
# >> script.rb:5:in spawn': No such file or directory - my_bin (Errno::ENOENT)
# >> from script.rb:5:in
'

=end

Also available in: Atom PDF