2015-11-01 11 views
7

La mia mente è saltata quando ho eseguito accidentalmente uno script di bash usando perl e ... ha funzionato. Sperimentare inoltre, sembra perl legge la baracca di uno script e invia all'interprete corretto:Perl invia ad altri interpreti in base alla linea 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 

um ... wut?

per assicurarsi che io non sono pazzo, ho provato a fare questo con altri interpreti e confermato questo è solo un perl-ismo:

$ 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 

Is questo è documentato da qualche parte? È una cosa nuova/vecchia cosa? ... Perché?

"motosega Swiss-Army".

risposta

10

Questa è una cosa vecchia documentato in perldoc perlrun:

Se la linea #! non contiene la parola "perl", né la parola "indir" il programma prende il nome dal #! viene eseguito al posto dell'interprete Perl . Questo è leggermente bizzarro, ma aiuta le persone su macchine che non lo fanno #!, perché possono dire a un programma che il loro SHELL è /usr/bin/perl, e Perl invierà quindi il programma all'interprete corretto per loro .

Problemi correlati