当我不小心使用perl运行bash脚本时,我的思绪被吹了...... 进一步尝试,似乎perl读取脚本的shebang并发送给正确的解释器:
$ cat /tmp/ohhai.sh
#!/bin/bash
echo ohhai bash
$ perl /tmp/ohhai.sh
ohhai bash
Run Code Online (Sandbox Code Playgroud)
$ cat /tmp/ohhai.py
#!/usr/bin/python2
print 'ohhai python'
$ perl /tmp/ohhai.py
ohhai python
Run Code Online (Sandbox Code Playgroud)
$ cat /tmp/ohhai.groovy
#!/usr/bin/groovy
println 'ohhai groovy'
$ perl /tmp/ohhai.groovy
ohhai groovy
Run Code Online (Sandbox Code Playgroud)
嗯......哇?
为了确保我没有疯狂,我尝试与其他口译员一起做这件事,并确认这只是一个perl-ism:
$ python /tmp/ohhai.sh
File "/tmp/ohhai.sh", line 2
echo ohhai bash
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
$ ruby /tmp/ohhai.sh
ruby: no Ruby script found in input (LoadError)
Run Code Online (Sandbox Code Playgroud)
$ bash /tmp/ohhai.py
/tmp/ohhai.py: line 2: print: command not found
Run Code Online (Sandbox Code Playgroud)
这是在某处记录的吗?这是一件新事物吗?......为什么?
确实是"瑞士军队电锯".
mel*_*ene 10
这是一个陈旧的事情perldoc perlrun:
如果该
#!行不包含单词"perl",也不包含单词"indir",#!则执行该程序而不是Perl解释程序.这有点奇怪,但它可以帮助那些不能做的人#!,因为他们可以告诉程序他们的SHELL是/ usr/bin/perl,然后Perl会将程序分派给正确的解释器.