So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten

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."""

Recommended Posts

So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
Wie schreibe ich Ruby to_s in Python
Ausführen externer Shell-Skripte und -Befehle in Python
So verpacken und verteilen Sie Python-Skripte
Wie schreibe ich diesen Prozess in Perl?
Verwendung ist und == in Python
Offline in Echtzeit, wie man ein Implementierungsbeispiel für E11 Ruby und Python schreibt
Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Das 14. Referenzproblem beim Schreiben in Echtzeit in Python
Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Verwendung der C-Bibliothek in Python
So generieren Sie eine Sequenz in Python und C ++
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Tipps zum Schreiben werden in Python kurz abgeflacht
So erhalten Sie die Dateien im Ordner [Python]
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
20. Offline-Echtzeit So schreiben Sie Probleme in Python
So rufen Sie den n-ten größten Wert in Python ab
So erhalten Sie den Variablennamen selbst in Python
So ermitteln Sie die Anzahl der Stellen in Python
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
Schreiben Sie Tests in Python, um die Abdeckung zu profilieren und zu überprüfen
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Verwendung des in Lobe in Python erlernten Modells
[Python] So geben Sie Listenwerte der Reihe nach aus
Umgang mit JSON in Ruby, Python, JavaScript, PHP
Wie man in Python entwickelt
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
Verwendung der Methode __call__ in der Python-Klasse
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
[Blender] Umgang mit Maus- und Tastaturereignissen in Blender-Skripten
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Ruby vs Python Performance. Wie wählt man die richtige Technologie aus?
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Vorgehensweise zum Ausleihen und Ausleihen von JS-Methoden (die verwendete Methode) in Python
[Python] Wie man PCA mit Python macht
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Im Python-Befehl zeigt Python auf Python3.8
So erhalten Sie die Python-Version
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
[Super einfach! ] So zeigen Sie den Inhalt von Wörterbüchern und Listen einschließlich Japanisch in Python an
Wie man MySQL mit Python benutzt