web-dev-qa-db-fra.com

à quoi sert "#! / usr / local / bin / Ruby -w" au début d'un programme Ruby

à quoi sert d'écrire la commande suivante au début d'un programme Ruby?

#!/usr/local/bin/Ruby -w

S'agit-il d'une commande spécifique au système d'exploitation? Est-il valable pour Ruby sur Windows? Sinon, alors qu'est-ce qu'une commande équivalente dans Windows?

29
simminni

La ligne Shebang est facultative, et si vous exécutez l'interpréteur Ruby et lui passez le script comme argument de ligne de commande, les indicateurs que vous définissez sur la ligne de commande sont les indicateurs Ruby fonctionne avec.

Une ligne Shebang n'est pas Ruby du tout (sauf si vous voulez l'appeler un Ruby commentaire). C'est vraiment un script Shell. La plupart des utilisateurs Linux et Unix exécutent le BASH Shell (signifie Borne Again Shell), mais à peu près tous les systèmes d'exploitation ont un interpréteur de commandes qui honorera le Shebang.

"#!/Usr/local/bin/Ruby -w"

La partie "elle" est l'octothorphe (#), alias le signe dièse, le signe numérique, la marque de hachage et maintenant la balise de hachage (je l'appelle toujours tic-tac-toe juste cuz).

La partie "coup" est le point d'exclamation (!), Et c'est comme frapper votre poing sur la table pour exclamer la commande.

Sous Windows, le "Shell" est l'invite de commande, mais même sans fenêtre DOS noire, l'interpréteur de commandes exécutera le script en fonction des associations de fichiers. Peu importe que l'interpréteur de commandes ou la langue de programmation lise le Shebang et s'assure que les drapeaux sont honorés, l'important est qu'ils soient honorés.

Le "-w" est un drapeau. Fondamentalement, il s'agit d'une instruction à suivre pour Ruby lors de l'exécution du script. Dans ce cas, "-w" active les avertissements, vous obtiendrez donc des avertissements supplémentaires (le script continue de s'exécuter) ou des erreurs (le script s'arrête de s'exécuter) pendant l'exécution du script. Les avertissements et les exceptions peuvent être interceptés et exécutés pendant le programme. Ils aident les programmeurs à détecter les problèmes qui conduisent à un comportement inattendu.

Je suis un fan de scripts rapides et sales pour faire un travail, donc non. Je suis également un fan du codage réutilisable de haute qualité, donc utilisez certainement -w. Le bon outil pour le bon travail. Si vous apprenez, utilisez toujours -w. Lorsque vous savez ce que vous faites et que vous arrêtez d'utiliser -w pour des tâches rapides, vous commencerez à comprendre quand cela aurait aidé à utiliser -w au lieu de passer des heures à résoudre des problèmes. (Astuce, lorsque la cause d'un problème n'est pas assez évidente, ajoutez simplement -w et exécutez-le pour voir ce que vous obtenez).

"-w" nécessite un codage supplémentaire pour clarifier Ruby ce que vous voulez dire, donc cela ne résout pas immédiatement les choses, mais si vous écrivez déjà du code avec -w, alors vous avez gagné " Je n'ai pas beaucoup de mal à ajouter les bits nécessaires pour exécuter un petit script avec des avertissements. En fait, si vous avez l'habitude d'utiliser -w, vous écrivez probablement déjà du code de cette façon et -w ne changera rien à moins que vous ' J'ai oublié quelque chose. Ruby nécessite beaucoup moins de "code de plomberie" que la plupart (peut-être tous) des langages compilés comme C++, donc choisir de ne pas utiliser -w ne vous permet pas d'économiser beaucoup de frappe, il vous permet juste de réfléchir moins avant d'essayer d'exécuter le script (à mon humble avis).

-v est en mode verbeux et ne modifie PAS le fonctionnement du script (aucun avertissement n'est émis, aucun arrêt du script dans de nouveaux emplacements). Plusieurs sites et discussions appellent le mode -w verbeux, mais -w est le mode d'avertissement et il modifie l'exécution du script.

24
Able Mac

Cela s'appelle un Shebang . Il indique au chargeur de programme la commande à utiliser pour exécuter le fichier. Ainsi, lorsque vous exécutez ./myscript.rb, cela se traduit en fait par /usr/local/bin/Ruby -w ./myscript.rb.

Windows utilise des associations de fichiers dans le même but; la ligne Shebang n'a aucun effet (édition: voir la réponse de FMc) mais ne fait pas de mal non plus.

Une méthode portable (fonctionnant, par exemple, sous Cygwin et RVM ) serait:

#!/usr/bin/env Ruby

Cela utilisera la commande env pour déterminer où se trouve l'interpréteur Ruby) et l'exécuter.

Edit: apparemment, précisément Cygwin se conduira mal avec /usr/bin/env Ruby -w et essayez de rechercher Ruby -w au lieu de Ruby. Vous voudrez peut-être mettre l'effet de -w dans le script lui-même.

63
Koterpillar

Bien que le comportement d'exécution d'une ligne Shebang ne se traduise pas directement dans le monde Windows, les indicateurs inclus sur cette ligne (par exemple le -w dans votre question) affecte le script Ruby en cours d'exécution).

Exemple 1 sur une machine Windows:

#!/usr/local/bin/Ruby -w
puts $VERBOSE   # true

Exemple 2 sur une machine Windows:

#!/usr/local/bin/Ruby
puts $VERBOSE   # false
8
FMc