在Ruby中运行shell脚本缺少shebang

时间:2013-10-09 21:39:42

标签: ruby shell

我在Ruby中发现了一个有趣的问题,我的行为无法解释。

我试图运行一个具有执行权限的shell脚本,但是shell脚本意外地遗漏了顶部的shebang(#!),它描述了如何运行该脚本。

如果我尝试使用反引号(`)在irb中运行脚本,它会说:

>> `./hello.sh`
(irb):3: command not found: ./hello.sh

足够公平。但是,如果我改为输入

>> `./hello.sh\n`
=> "hello\n"

令人惊讶的是有效。请注意%x{...}的行为与上述一致(鉴于它们的等效性,这并不奇怪),但system()不起作用,换行或不行(我没问题)。另外,毫不奇怪,在适当的#!中添加回shell脚本(hello.sh)可以使一切正常。

我试着寻找答案,我只能在“Command not found when I call `./myshell` in ruby”中找到它的暗示。但是,回复驳回了换行符更改命令语义的想法,这似乎就是这样。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法重现这个问题,对我而言,一切正常:

〜/ echo'echo“foobar”'> hello.sh 〜/ cat hello.sh 回声“foobar” 〜/ irb 1.9.3p194:001> ./hello.sh  => “foobar的\ n” 1.9.3p194:002> ./hello.sh\n  => “foobar的\ n” 个

运行Ruby 1.9.3,zshell,Mac OS