2

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

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

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

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

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

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

它出奇地有效。请注意,%x{...}' 的行为与上述一致(考虑到它们的等价性,这并不奇怪),但system()不管换行与否(我确定)都不起作用。此外,毫不奇怪,将适当#!的内容添加回 shell 脚本 (hello.sh) 会使一切正常。

我试图寻找答案,我只能在“当我在 ruby​​ 中调用 `./myshell` 时找不到命令”中找到一个暗示。然而,回复驳斥了换行符改变命令语义的想法,这似乎是这样做的。

有任何想法吗?

4

1 回答 1

0

我无法重新创建此问题,对我来说,这一切正常:

~/ echo 'echo "foobar"' > hello.sh ~/ cat hello.sh echo "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

于 2013-10-10T07:14:53.730 回答