我在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/