Подтвердить что ты не робот

Что используется "#!/usr/local/bin/ruby ​​-w" в начале рубиновой программы

зачем использовать следующую команду в начале рубиновой программы?

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

Это конкретная команда ОС? Это действительно для рубинов на окнах? если нет, то что такое эквивалентная команда в окнах?

4b9b3361

Ответ 1

Строка Shebang не является обязательной, и если вы запустите интерпретатор ruby ​​и передаете ему script в качестве аргумента командной строки, то флаги, которые вы устанавливаете в командной строке, являются флагами ruby, выполняемыми с.

Строка Shebang вообще не рубиновая (если вы не хотите называть ее рубиновым комментарием). Это действительно сценарий оболочки. Большинство пользователей Linux и Unix запускают оболочку BASH (означает Borne Again SHell), но почти каждая операционная система имеет командный интерпретатор, который будет уважать Shebang.

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

Часть "она" - это октоторп (#), знак фунта, знак числа, хэш-знак и теперь хэш-тег (я все еще называю это tic-tac-toe только cuz).

Часть "взрыва" - это знак восклицания (!), и он как бы разбивает кулак по таблице, чтобы воскликнуть о команде.

В Windows "оболочка" представляет собой командную строку, но даже без черного окна DOS интерпретатор команд будет запускать script на основе ассоциаций файлов. На самом деле не имеет значения, читает ли командный интерпретатор или язык программирования значение shebang и удостоверяется, что флаги соблюдены, важно то, что они заслуживают внимания.

"-w" - это флаг. В основном это инструкция для рубинов, чтобы следовать, когда она запускает script. В этом случае "-w" включает предупреждения, поэтому вы получите дополнительные предупреждения (script продолжает работать) или ошибки (script перестает работать) во время выполнения script. Предупреждения и исключения могут быть пойманы и приняты во время программы. Это помогает программистам найти проблемы, которые приводят к неожиданному поведению.

Я поклонник быстрых и грязных сценариев, чтобы выполнить работу, поэтому no -w. Я также являюсь поклонником многоразового кодирования высокого качества, поэтому обязательно используйте -w. Правильный инструмент для правильной работы. Если вы учитесь, тогда всегда используйте -w. Когда вы знаете, что делаете, и прекратите использовать -w на быстрых задачах, вы начнете выяснять, когда это помогло бы использовать -w вместо того, чтобы тратить часы на стрельбу. (Подсказка, когда причина проблемы не совсем очевидна, просто добавьте -w и запустите ее, чтобы увидеть, что вы получаете).

"- w" требует некоторого дополнительного кодирования, чтобы было ясно, что вы имеете в виду рубин, поэтому он не сразу решает проблемы, но если вы уже пишете код с -w, то у вас не будет особых проблем с добавлением необходимые биты, чтобы сделать небольшой script запуск с предупреждениями. На самом деле, если вы привыкли использовать -w, вы, вероятно, уже пишете код таким образом, и -w ничего не измените, если не забыли что-то. Ruby требует гораздо меньше "сантехнического кода", чем большинство (возможно, все) скомпилированных языков, таких как С++, поэтому выбор не использовать -w не позволяет вам экономить много ввода, это просто позволяет вам думать меньше, прежде чем пытаться запустить script (ИМХО).

-v - это подробный режим и НЕ меняет работу script (предупреждения не поднимаются, не останавливая script в новых местах). Несколько сайтов и обсуждений вызывают режим verwose -w, но -w - это предупреждающий режим, и он изменяет выполнение script.

Ответ 2

Он называется Shebang. Он сообщает загрузчику программы, какую команду использовать для выполнения файла. Поэтому, когда вы запускаете ./myscript.rb, он фактически переводит на /usr/local/bin/ruby -w ./myscript.rb.

Windows использует ассоциации файлов для той же цели; линия shebang не имеет эффекта (отредактируйте: см. ответ FMc), но также не наносит вреда.

Портативный способ (работающий, скажем, под Cygwin и RVM):

#!/usr/bin/env ruby

Это будет использовать команду env, чтобы выяснить, где интерпретатор Ruby и запустить его.

Изменить: по-видимому, именно Cygwin будет плохо себя вести с помощью /usr/bin/env ruby -w и попытаться найти ruby -w вместо ruby. Возможно, вы захотите поместить эффект -w в сам script.

Ответ 3

Хотя поведение выполнения строки shebang не переводится непосредственно в мир Windows, флаги, включенные в эту строку (например, -w в вашем вопросе), влияют на исполняемый Ruby script.

Пример 1 на машине Windows:

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

Пример 2 на машине Windows:

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