Comment écrire le bon shebang dans les scripts Perl, Python et Ruby

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

Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Comment écrire Ruby to_s en Python
Comment exécuter des commandes et des scripts shell externes en python
Comment empaqueter et distribuer des scripts Python
Comment écrire ce processus en Perl?
Comment utiliser is et == en Python
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Le 14ème problème de référence d'écriture en temps réel hors ligne en python
Le 18ème comment écrire un problème de référence en temps réel hors ligne en Python
Comment afficher les octets de la même manière en Java et Python
Comment utiliser la bibliothèque C en Python
Comment générer une séquence en Python et C ++
Comment obtenir la différence de date et d'heure en secondes avec Python
Conseils pour rédiger un aplatissement concis en python
Comment obtenir les fichiers dans le dossier [Python]
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
20e Comment écrire des problèmes en temps réel hors ligne en Python
Comment récupérer la nième plus grande valeur en Python
Comment obtenir le nom de la variable lui-même en python
Comment obtenir le nombre de chiffres en Python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment connaître le répertoire actuel en Python dans Blender
Écrire des tests en Python pour profiler et vérifier la couverture
[Python] Comment trier un dict dans une liste et une instance dans une liste
Je veux écrire en Python! (3) Utiliser des simulacres
Comment utiliser le modèle appris dans Lobe en Python
[Python] Comment afficher les valeurs de liste dans l'ordre
Comment gérer JSON en Ruby, Python, JavaScript, PHP
Comment développer en Python
Comment écrire une validation personnalisée dans Django REST Framework
[python] Comment vérifier si la clé existe dans le dictionnaire
Comment déboguer une bibliothèque Python standard dans Visual Studio
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
Comment utiliser la méthode __call__ dans la classe Python
[Python] Comment écrire une instruction if en une phrase.
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir toutes les clés et valeurs du dictionnaire
[Blender] Comment gérer les événements de souris et de clavier dans les scripts Blender
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Performances Ruby vs Python Comment choisir la bonne technologie?
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Comment faire "Prêter et emprunter des méthodes JS (celle qui utilise s'appliquent)" en Python
[Python] Comment faire PCA avec Python
Comment collecter des images en Python
Comment utiliser SQLite en Python
Dans la commande python, python pointe vers python3.8
Comment obtenir la version Python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
[Super facile! ] Comment afficher le contenu des dictionnaires et des listes incluant le japonais en Python
Comment utiliser Mysql avec python