From: "akr (Akira Tanaka)" Date: 2012-06-04T20:57:44+09:00 Subject: [ruby-core:45420] [ruby-trunk - Feature #4477][Closed] Kernel:exec and backtick (`) don't work for certain system commands 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 `
' ~$ 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 ``. 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/