2013-10-09 38 views
2

我在Ruby中發現了一個我無法解釋的有趣問題。在Ruby中運行shell腳本丟失shebang

我試圖運行一個具有執行權限的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」中找到暗示。但是,答覆駁斥了換行符改變命令的語義的想法,這似乎是這樣做的。

任何想法?

回答

0

我不能重現這個問題,對我來說,這一切都工作好:

〜/回聲 '回聲 「foobar的」'> hello.sh 〜/貓hello.sh 回聲 「foobar的」 〜/ IRB 1.9.3p194:001>./hello.sh => 「foobar的\ n」 個 1.9.3p194:002>./hello.sh\n => 「foobar的\ n」 個

運行紅寶石1.9.3,zshell的Mac OS