Я установил RubyInstaller в Windows и запускаю IMAP Sync, но мне нужно использовать его для синхронизации сотен учетных записей. Если бы я мог передать эти переменные ему через командную строку, я бы лучше автоматизировал весь процесс.
# Source server connection info.
SOURCE_NAME = 'username@example.com'
SOURCE_HOST = 'mail.example.com'
SOURCE_PORT = 143
SOURCE_SSL = false
SOURCE_USER = 'username'
SOURCE_PASS = 'password'
# Destination server connection info.
DEST_NAME = 'username@gmail.com'
DEST_HOST = 'imap.gmail.com'
DEST_PORT = 993
DEST_SSL = true
DEST_USER = 'username@gmail.com'
DEST_PASS = 'password'
ruby
command-line
Вспышка
источник
источник
Ответы:
Что-то вроде этого:
затем
или
источник
#!/usr/bin/env ruby
в.rb
./test.rb
Не изобретай велосипед; проверить путь-прохладное Руби OptionParser библиотеки.
Он предлагает анализ флагов / переключателей, параметров с необязательными или обязательными значениями, может анализировать списки параметров в одну опцию и может генерировать вашу помощь для вас.
Кроме того, если передаваемая вами информация довольно статична, она не меняется между запусками, поместите ее в YAML-файл, который будет проанализирован. Таким образом, вы можете иметь вещи, которые меняются каждый раз в командной строке, и вещи, которые изменяются, время от времени конфигурируемые вне вашего кода. Такое разделение данных и кода хорошо для обслуживания.
Вот несколько примеров для игры:
Это пример файла YAML, если ваши пункты назначения довольно статичны:
Это позволит вам легко сгенерировать файл YAML:
источник
ARGV
содержит только операнды, если они есть (то есть оставшиеся аргументы без опции).К сожалению, Ruby не поддерживает такой механизм передачи, как, например, AWK:
Это означает, что вы не можете передавать именованные значения в ваш скрипт напрямую.
Использование параметров cmd может помочь:
Ruby хранит все аргументы cmd в
ARGV
массиве, само имя сценария может быть записано с помощью$PROGRAM_NAME
переменной.Очевидным недостатком является то, что вы зависите от порядка значений.
Если вам нужны только булевы ключи, используйте опцию
-s
интерпретатора Ruby:Обратите внимание на
--
переключатель, в противном случае Ruby будет жаловаться на несуществующий параметр-agreed
, поэтому передайте его как переключатель для вызова cmd. Вам не нужно это в следующем случае:Недостатком является то, что вы связываетесь с глобальными переменными и имеете только логические значения true / false.
Вы можете получить доступ к значениям из переменных среды:
Здесь есть недостатки, вам нужно установить все переменные перед вызовом скрипта (только для вашего процесса ruby) или экспортировать их (оболочки типа BASH):
В последнем случае ваши данные будут доступны для чтения всем участникам одного и того же сеанса оболочки и всем подпроцессам, что может стать серьезным следствием для безопасности.
И, по крайней мере, вы можете реализовать парсер опций, используя getoptlong и optparse .
Счастливого взлома!
источник
Вы также можете попробовать
cliqr
. Это довольно новый и в активном развитии. Но есть стабильные релизы, готовые к использованию. Вот git репо: https://github.com/anshulverma/cliqrПосмотрите в папку с примерами, чтобы понять, как ее можно использовать.
источник
Запустите этот код в командной строке и введите значение N:
источник
Если это не самый простой случай, есть только один разумный способ использовать параметры командной строки в Ruby. Это называется docopt и задокументировано здесь .
Что удивительного в этом, так это простота. Все, что вам нужно сделать, это указать текст «справки» для вашей команды. То, что вы там пишете, будет автоматически проанализировано отдельной (!) Библиотекой ruby.
Из примера :
Выход:
Наслаждайтесь!
источник
Вы должны попробовать gem console_runner . Этот гем делает ваш чистый код Ruby исполняемым из командной строки. Все, что вам нужно, это добавить аннотации YARD в ваш код:
Затем запустите его из консоли:
источник
ТЛ; др
Я знаю, что это старо, но getoptlong здесь не упоминался, и это, вероятно, лучший способ для анализа аргументов командной строки сегодня.
Разбор аргументов командной строки
Я настоятельно рекомендую getoptlong . Он довольно прост в использовании и работает как шарм. Вот пример, извлеченный из ссылки выше
Вы можете назвать это так
ruby hello.rb -n 6 --name -- /tmp
Что ОП пытается сделать
В этом случае я думаю, что лучший вариант - использовать файлы YAML, как предлагается в этом ответе.
источник