Couper
Suite ceci que j'ai écrit il y a longtemps.
Oh, je ne parlerai pas du comportement sous Windows.
A
$ cat hoge.pl
#!/bin/bash
find . -type f | perl -x $0
exit 0
#!/usr/bin/env perl -ln
print ;
$ perl hoge.pl
./bar
./foo
./hoge
.
.
.
Si la ligne #! Ne contient pas les mots "perl" ou "indir", le programme spécifié après #! Sera exécuté à la place de l'interpréteur Perl. C'est un peu bizarre, mais cela fonctionne pour ceux qui utilisent une machine qui ne peut pas faire # !; Si vous dites que le SHELL que vous utilisez pour votre programme est / usr / bin / perl, alors Perl est correct. Parce que ça lance l'interprète. (Extrait de perlrun)
En d'autres termes
python
$ cat hoge.rb
#!/usr/bin/env ruby
puts("ruby")
$ perl hoge.rb
ruby
$ cat hoge.sh
#!/bin/bash
echo bash
$ perl hoge.sh
bash
Si le script spécifié sur la ligne de commande est un fichier commençant par «#!» Et que la ligne ne contient pas la chaîne «ruby», la ligne est ignorée. Si la chaîne suivant
#!
Trouve une ligne contenant la chaîneruby
, exécutez la ligne sous cette ligne en tant que script Ruby. (Cité de rdoc)
B
$ cat hoge2.sh
#!/bin/bash
echo bash
ruby -x $0
exit 0
#!/usr/bin/env ruby
puts("ruby")
dans le cas de,
python
$ ruby hoge2.sh
ruby
Si vous spécifiez le commutateur> -x, il recherche d'abord une ligne contenant les chaînes #! Et "perl" et commence l'analyse à partir de là. Ceci est utile lorsque vous souhaitez incorporer un programme dans un texte volumineux et l'exécuter. (Dans ce cas, la fin du programme doit être indiquée par le jeton END.)
(Extrait de perlrun)
Pour ruby, la même chose est clairement indiquée dans rdoc.
Par conséquent, le code de A tient.
même en rubis B
Exécutez B avec bash.
$ bash hoge2.sh
bash
ruby
Donc vous pouvez aussi dire ceci.
python
$ cat hoge3.sh
#!/bin/bash
echo bash
perl -x $0
ruby -x $0
exit 0
#!/usr/bin/env perl
print("perl\n") ;
__END__
#!/usr/bin/env ruby
puts("ruby")
__END__
Courir avec bash
$ bash hoge3.sh
bash
perl
ruby
Exécuter avec perl
$ perl hoge3.sh
bash
perl
ruby
Courir avec du rubis
$ ruby hoge3.sh
ruby
J'ai écrit ça
Si vous le relisez, dans le cas du rubis, il n'y a aucune signification de l'existence de -x? À quoi ça sert ... peut-être pour Windows ...
tsuiki.sh
#!/bin/bash
ruby -x $0
exit 0
#!/usr/bin/env ruby
puts("ruby")
^D #Contrôle+V, Contorol+Intégré avec D(terminal mac)
puts("test")
$ bash tsuiki.sh
ruby
$ ruby tsuiki.sh
ruby
Dans le cas de python, bien qu'il y ait -x, il est clairement indiqué que "une seule ligne est ignorée" avec des restrictions considérables.
-x (original) Ignorez la première ligne de source pour utiliser #! Cmd au format non-Unix. Ceci est pour les hacks DOS uniquement. (Cité de Document)
Cependant, si vous en faites trop,
$ cat hoge4.sh
find . -type f | python -x $0 ; exit 0
#!/usr/bin/env python
import sys
for line in sys.stdin:
print(line.strip())
Même chose que A
$ bash hoge4.sh
./bar
./foo
./hoge
.
.
.
Ce n'est pas impossible de faire quelque chose comme ça.
Recommended Posts