ruby shebang

¿Cuál es el uso de “#!/usr/local/bin/ruby-w” al inicio de un programa ruby?



shebang (3)

Aunque el comportamiento de ejecución de una línea shebang no se traduce directamente al mundo de Windows, las marcas incluidas en esa línea (por ejemplo, la -w en su pregunta) afectan la secuencia de comandos de Ruby en ejecución.

Ejemplo 1 en una máquina con Windows:

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

Ejemplo 2 en una máquina con Windows:

#!/usr/local/bin/ruby puts $VERBOSE # false

¿Cuál es el uso de escribir el siguiente comando al inicio de un programa ruby?

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

¿Es un comando específico del sistema operativo? ¿Es válido para ruby ​​en windows? Si no, ¿entonces qué es un comando equivalente en Windows?


La línea Shebang es opcional, y si ejecuta el intérprete de ruby ​​y le pasa el script como un argumento de línea de comando, entonces las banderas que establece en la línea de comandos son las marcas con las que ruby ​​se ejecuta.

Una línea Shebang no es ruby ​​(a menos que quieras llamarlo un comentario ruby). Es realmente shell scripting. La mayoría de los usuarios de Linux y Unix ejecutan el shell BASH (significa Borne Again SHell), pero casi todos los sistemas operativos tienen un intérprete de comandos que honrará a Shebang.

“#! / Usr / local / bin / ruby ​​-w”

La parte "she" es octothorp (#), también conocido como signo de número, signo de número, marca de hash y etiqueta hash (todavía lo llamo tic-tac-toe solo porque).

La parte "bang" es el signo de exclamación (!), Y es como golpear el puño sobre la mesa para exclamar el comando.

En Windows, el "Shell" es el símbolo del sistema, pero incluso sin una ventana negra de DOS, el intérprete de comandos ejecutará el script en función de las asociaciones de archivos. Realmente no importa si el intérprete de comandos o la lengua de programación está leyendo el shebang y asegurándose de que se respeten las banderas, el punto importante es que se respetan.

La "-w" es una bandera. Básicamente es una instrucción que debe seguir Ruby cuando ejecuta el script. En este caso, "-w" activa las advertencias, por lo que recibirá advertencias adicionales (la secuencia de comandos continúa ejecutándose) o errores (la secuencia de comandos deja de ejecutarse) durante la ejecución de la secuencia de comandos. Las advertencias y excepciones se pueden detectar y aplicar durante el programa. Estos ayudan a los programadores a encontrar problemas que conducen a un comportamiento inesperado.

Soy un fan de los scripts rápidos y sucios para hacer un trabajo, así que no -w. También soy un fan de la codificación reutilizable de alta calidad, por lo que definitivamente uso -w. La herramienta adecuada para el trabajo correcto. Si estás aprendiendo, entonces usa siempre -w. Cuando sepa lo que está haciendo y deje de usar -w en tareas rápidas, empezará a descubrir cuándo le habría ayudado a usar -w en lugar de pasar horas y horas resolviendo problemas. (Sugerencia, cuando la causa de un problema no sea tan obvia, simplemente agregue -w y ejecútelo para ver qué obtiene).

"-w" requiere un código adicional para aclarar lo que quieres decir, por lo que no resuelve las cosas de inmediato, pero si ya escribes el código con -w, no tendrás muchos problemas para agregar los bits necesarios. Hacer un pequeño script ejecutado con advertencias. De hecho, si estás acostumbrado a usar -w, probablemente ya estés escribiendo código de esa manera y -w no cambiará nada a menos que hayas olvidado algo. Ruby requiere mucho menos "código de plomería" que la mayoría (quizás todos) lenguajes compilados como C ++, por lo que elegir no usar -w no le permite ahorrar mucho al escribir, solo le permite pensar menos antes de intentar ejecutar el script (IMHO ).

-v es un modo detallado, y NO cambia la ejecución del script (no se generan advertencias, no se detiene el script en lugares nuevos). Varios sitios y discusiones llaman al modo detallado -w, pero -w es el modo de advertencia y cambia la ejecución del script.


Se llama un Shebang . Le dice al cargador de programas qué comando usar para ejecutar el archivo. Entonces, cuando ejecuta ./myscript.rb , en realidad se traduce a /usr/local/bin/ruby -w ./myscript.rb .

Windows usa asociaciones de archivos para el mismo propósito; La línea shebang no tiene ningún efecto (edición: ver la respuesta de FMc) pero tampoco causa daño.

Una forma portátil (trabajando, digamos, bajo Cygwin y RVM ) sería:

#!/usr/bin/env ruby

Esto utilizará el comando env para averiguar dónde está el intérprete de Ruby y ejecutarlo.

Edición: al parecer, precisamente Cygwin se portará mal con /usr/bin/env ruby -w y tratará de buscar ruby -w lugar de ruby . Es posible que desee poner el efecto de -w en el script mismo.