Unter Unix-basierten Betriebssystemen kann der zu startende Interpreter durch die erste Zeile (Shebang genannt) angegeben werden, die mit "#!" Im Skript beginnt. Das folgende Beispiel stammt aus Wikipedia.
example1.sh
#! /bin/sh
echo 'Hello world!'
Dieser Shebang hat je nach Betriebssystem verschiedene Probleme wie Einschränkungen und unterschiedliche Interpretationen.
Davon abgesehen, um Ruby zu starten,
example1.rb
#! /usr/bin/ruby
puts 'Hello world!'
Ruby ist nicht immer in / usr / bin / ruby
. Je nach System kann es sich in "/ usr / local / bin / ruby" befinden. Der Befehl env
wird häufig verwendet, um dieses Problem zu vermeiden.
example2.rb
#! /usr/bin/env ruby
puts 'Hello world!'
Dies scheint in den meisten Umgebungen gut zu funktionieren, aber es gibt Betriebssysteme ohne / usr / bin / env
. (Shohei Urabes Tumblr: #! / Usr / bin / env)
Zusammenfassend scheint es gut zu sein, so zu schreiben. (Ruby 1.8.7 Referenzhandbuch: Starten von Ruby)
example3.rb
#! /bin/sh
exec ruby -S -x "$0" "$@"
#! ruby
Das gestartete sh
springt mit exec
in der zweiten Zeile zu Ruby und Ruby springt zur dritten Zeile.
Das Gleiche wird in Python wie folgt gemacht. (effbot.org: Wie mache ich ein Python-Skript unter Unix ausführbar?)
example.py
#! /bin/sh
""":"
exec python "$0" ${1+"$@"}
"""
__doc__ = """The above defines the script's __doc__ string. You can fix it by like this."""
Auf der anderen Seite sind Perl-Benutzer so. (The Magic Perl Header)
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
** Nachtrag (21.10.2015) **
Das obige Python-Beispiel scheint in pep257 hängen zu bleiben. Also habe ich versucht, diesen Scheck zu überwinden.
example2.py
#!/bin/sh
""":" .
exec python "$0" "$@"
"""
__doc__ = """
The above defines the script's __doc__ string. You can fix it by like this."""