Issue #4477 has been updated by akr (Akira Tanaka).

Status changed from Assigned to Closed

The feature of shell, invoke /bin/sh after ENOEXEC, is implemented
at r33009 of Ruby.

So this example works now as follows.

  % cat test1
  echo success
  % chmod a+x test1
  % ./ruby -ve 'p `./test1`'
  ruby 2.0.0dev (2012-06-04 trunk 35911) [x86_64-linux]
  "success\n"


----------------------------------------
Feature #4477: Kernel:exec and backtick (`) don't work for certain system commands
https://bugs.ruby-lang.org/issues/4477#change-27009

Author: JWuttke (Joachim Wuttke)
Status: Closed
Priority: Normal
Assignee: akr (Akira Tanaka)
Category: 
Target version: 


From documentation and common sense, I would expect that Kernel:exec and backtick (`) work for _all_ kind of system commands. This is currently not the case.

~$ cat test1
echo success
~$ cat test2
#!/bin/sh
echo success
~$ chmod a+x test?
~$ ruby1.8 -e 'p `test1`'
-e:1: command not found: test1
""
~$ ruby1.9 -e 'p `test1`'
-e:1:in ``': Exec format error - test1 (Errno::ENOEXEC)
        from -e:1:in `<main>'
~$ ruby1.8 -e 'p `test2`'
"success\n"
~$ ruby1.9 -e 'p `test2`'
"success\n"

This problem has been reported before (#3856: strange Kernel#exec behavior with bash's source command). As a workaround, it has been suggested to append a semikolon to the system command:

~$ ruby1.8 -e 'p `test1;`'
"success\n"
~$ ruby1.9 -e 'p `test1;`'
"success\n"

The report #3856 has been closed with the decision "not a bug".

This I cannot accept. For many years, I got used to run system commands through `<cmd>`. When it failed, I spent painfully long time to search for a bug in my Ruby code and in the system command before I realized the problem was due to an unexpected restriction of Ruby's exec/backtick.



-- 
http://bugs.ruby-lang.org/