Perl根据shebang线派遣到其他口译员?

时间:2015-11-01 12:11:37

标签: perl shebang

当我意外地使用perl运行bash脚本时,我的思绪被炸了......它工作了。进一步尝试,似乎perl读取脚本的shebang并发送给正确的解释器:

$ cat /tmp/ohhai.sh
#!/bin/bash
echo ohhai bash

$ perl /tmp/ohhai.sh
ohhai bash
$ cat /tmp/ohhai.py
#!/usr/bin/python2
print 'ohhai python'

$ perl /tmp/ohhai.py
ohhai python
$ cat /tmp/ohhai.groovy
#!/usr/bin/groovy
println 'ohhai groovy'

$ perl /tmp/ohhai.groovy
ohhai groovy
嗯......哇?

为了确保我没有疯狂,我尝试与其他口译人员一起做这件事,并确认这只是一个perl-ism:

$ python /tmp/ohhai.sh
  File "/tmp/ohhai.sh", line 2
    echo ohhai bash
             ^
SyntaxError: invalid syntax
$ ruby /tmp/ohhai.sh
ruby: no Ruby script found in input (LoadError)
$ bash /tmp/ohhai.py
/tmp/ohhai.py: line 2: print: command not found

这是在某处记录的吗?这是一件新事物吗? ......为什么?

“瑞士军队电锯”确实。

1 个答案:

答案 0 :(得分:10)

这是perldoc perlrun中记录的旧事:

  

如果#!行不包含单词“perl”或单词“indir”,则执行以#!命名的程序而不是Perl解释器。这有点奇怪,但它可以帮助那些没有#!的机器上的人,因为他们可以告诉程序他们的SHELL是 / usr / bin / perl ,然后Perl会将程序发送给正确的解释器。