Dans un système d'exploitation basé sur Unix, l'interpréteur à démarrer peut être spécifié par la première ligne (appelée shebang) commençant par #!
Dans le script. Voici un exemple emprunté à Wikipedia.
example1.sh
#! /bin/sh
echo 'Hello world!'
Ce shebang a divers problèmes tels que des restrictions et des interprétations différentes selon le système d'exploitation.
Cela mis à part, pour lancer Ruby,
example1.rb
#! /usr/bin/ruby
puts 'Hello world!'
Ruby n'est pas toujours dans / usr / bin / ruby
. Selon le système, il peut être dans / usr / local / bin / ruby
. La commande ʻenv` est souvent utilisée pour éviter ce problème.
example2.rb
#! /usr/bin/env ruby
puts 'Hello world!'
Cela semble bien fonctionner dans la plupart des environnements, mais il existe des systèmes d'exploitation qui n'ont pas / usr / bin / env
. (Tumblr de Shohei Urabe: #! / Usr / bin / env)
En conclusion, il semble bon d'écrire comme ça. (Manuel de référence de Ruby 1.8.7: Démarrage de Ruby)
example3.rb
#! /bin/sh
exec ruby -S -x "$0" "$@"
#! ruby
Le sh
commencé passe à Ruby avec ʻexec` sur la deuxième ligne, et Ruby saute à la troisième ligne.
La même chose est faite en Python comme suit. (effbot.org: Comment rendre un script Python exécutable sous Unix?)
example.py
#! /bin/sh
""":"
exec python "$0" ${1+"$@"}
"""
__doc__ = """The above defines the script's __doc__ string. You can fix it by like this."""
D'un autre côté, les utilisateurs de Perl sont comme ça. (L'en-tête Magic Perl)
example.pl
#! /bin/sh
eval '(exit $?0)' && eval 'PERL_BADLANG=x;PATH="$PATH:.";export PERL_BADLANG\
;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;eval 'setenv PERL_BADLANG x\
;setenv PATH "$PATH":.;exec perl -x -S -- "$0" $argv:q;#'.q
#!perl -w
+push@INC,'.';$0=~/(.*)/s;do(index($1,"/")<0?"./$1":$1);die$@if$@__END__+if 0
;#Don't touch/remove lines 1--7: http://www.inf.bme.hu/~pts/Magic.Perl.Header
** Additif (2015/10/21) **
L'exemple Python ci-dessus semble rester bloqué dans pep257. J'ai donc essayé de passer ce contrôle.
example2.py
#!/bin/sh
""":" .
exec python "$0" "$@"
"""
__doc__ = """
The above defines the script's __doc__ string. You can fix it by like this."""
Recommended Posts