我在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」中找到暗示。但是,答覆駁斥了換行符改變命令的語義的想法,這似乎是這樣做的。
任何想法?