我在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”中找到它的一个暗示,然而,这个答案否定了换行符改变命令语义的想法,这似乎是这样。
有什么想法吗?

最佳答案

我无法重现这个问题,对我来说,一切正常:
~/echo'echo“foobar”'>hello.sh
~/cat你好.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

关于ruby - 运行shell脚本在Ruby中缺少shebang,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19283256/

10-14 14:13
查看更多