Forum: Ruby-core [ruby-trunk - Bug #8004][Open] Open3 not finding binaries when PATH env var is passed as first arg

Posted by Josh Cheek (josh-cheek)
on 2013-03-02 12:21
(Received via mailing list)
Issue #8004 has been reported by josh.cheek (Josh Cheek).

----------------------------------------
Bug #8004: Open3 not finding binaries when PATH env var is passed as 
first arg
https://bugs.ruby-lang.org/issues/8004

Author: josh.cheek (Josh Cheek)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]


=begin
 #!/bin/sh

 # make an executable
   echo '#!/usr/bin/env ruby' >  my_bin
   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", "", #<Process::Status: pid 30556 exit 0>]

 # 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"]}"}, 
"my_bin")'
     # >> 
/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 `<main>'

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

   # 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
Posted by Josh Cheek (josh-cheek)
on 2013-03-02 13:05
(Received via mailing list)
Issue #8004 has been updated by josh.cheek (Josh Cheek).


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

 #!/bin/sh

 cat script.rb
   # >> File.write 'my_bin', '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 `<main>'

=end

----------------------------------------
Bug #8004: Open3 not finding binaries when PATH env var is passed as 
first arg
https://bugs.ruby-lang.org/issues/8004#change-37251

Author: josh.cheek (Josh Cheek)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]


=begin
 #!/bin/sh

 # make an executable
   echo '#!/usr/bin/env ruby' >  my_bin
   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", "", #<Process::Status: pid 30556 exit 0>]

 # 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"]}"}, 
"my_bin")'
     # >> 
/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 `<main>'

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

   # 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
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.