J'ai installé RubyInstaller sur Windows et j'exécute IMAP Sync mais je dois l'utiliser pour synchroniser des centaines de comptes. Si je pouvais lui transmettre ces variables via la ligne de commande, je pourrais mieux automatiser l'ensemble du processus.
# Source server connection info.
SOURCE_NAME = '[email protected]'
SOURCE_HOST = 'mail.example.com'
SOURCE_PORT = 143
SOURCE_SSL = false
SOURCE_USER = 'username'
SOURCE_PASS = 'password'
# Destination server connection info.
DEST_NAME = '[email protected]'
DEST_HOST = 'imap.gmail.com'
DEST_PORT = 993
DEST_SSL = true
DEST_USER = '[email protected]'
DEST_PASS = 'password'
ruby
command-line
Le flash
la source
la source
Réponses:
Quelque chose comme ça:
puis
ou
la source
#!/usr/bin/env ruby
en haut du.rb
fichier pour pouvoir l'exécuter comme ceci:./test.rb
Ne réinventez pas la roue; consultez la bibliothèque OptionParser très cool de Ruby .
Il propose l'analyse des indicateurs / commutateurs, des paramètres avec des valeurs facultatives ou obligatoires, peut analyser les listes de paramètres en une seule option et peut générer votre aide pour vous.
De plus, si l'une de vos informations transmises est assez statique, cela ne change pas entre les exécutions, placez-la dans un fichier YAML qui est analysé. De cette façon, vous pouvez avoir des choses qui changent à chaque fois sur la ligne de commande, et des choses qui changent parfois configurées en dehors de votre code. Cette séparation des données et du code est agréable pour la maintenance.
Voici quelques exemples pour jouer avec:
Voici un exemple de fichier YAML si vos destinations sont assez statiques:
Cela vous permettra de générer facilement un fichier YAML:
la source
ARGV
ne contient que les opérandes, le cas échéant (c'est-à-dire les arguments NON-option restants).Malheureusement, Ruby ne prend pas en charge un tel mécanisme de passage comme par exemple AWK:
Cela signifie que vous ne pouvez pas passer directement des valeurs nommées dans votre script.
L'utilisation des options cmd peut aider:
Ruby stocke tous les arguments cmd dans le
ARGV
tableau, le nom de script lui-même peut être capturé à l'aide de la$PROGRAM_NAME
variable.L'inconvénient évident est que vous dépendez de l'ordre des valeurs.
Si vous n'avez besoin que de commutateurs booléens, utilisez l'option
-s
de l'interpréteur Ruby:Veuillez noter le
--
commutateur, sinon Ruby se plaindra d'une option inexistante-agreed
, alors passez-la comme commutateur à votre invocation cmd. Vous n'en avez pas besoin dans le cas suivant:L'inconvénient est que vous jouez avec les variables globales et n'avez que des valeurs logiques vrai / faux.
Vous pouvez accéder aux valeurs des variables d'environnement:
Les inconvénients sont présents ici, vous devez définir toutes les variables avant l'invocation du script (uniquement pour votre processus ruby) ou les exporter (shells comme BASH):
Dans ce dernier cas, vos données seront lisibles pour tout le monde dans la même session shell et pour tous les sous-processus, ce qui peut être une grave implication pour la sécurité.
Et au moins, vous pouvez implémenter un analyseur d'options en utilisant getoptlong et optparse .
Bon piratage!
la source
Vous pouvez également essayer
cliqr
. C'est assez nouveau et en développement actif. Mais il existe des versions stables prêtes à être utilisées. Voici le dépôt git: https://github.com/anshulverma/cliqrRegardez dans le dossier d'exemple pour avoir une idée de la façon dont il peut être utilisé.
la source
Exécutez ce code sur la ligne de commande et entrez la valeur de N:
la source
À moins que ce ne soit le cas le plus trivial, il n'y a qu'une seule façon saine d'utiliser les options de ligne de commande dans Ruby. Il est appelé docopt et documenté ici .
Ce qui est étonnant, c'est sa simplicité. Il vous suffit de spécifier le texte "aide" de votre commande. Ce que vous y écrivez sera ensuite analysé automatiquement par la bibliothèque ruby autonome (!).
De l' exemple :
Le résultat:
Prendre plaisir!
la source
Vous devriez essayer console_runner gem. Cette gemme rend votre code Ruby pur exécutable à partir de la ligne de commande. Tout ce dont vous avez besoin est d'ajouter des annotations YARD à votre code:
Exécutez-le ensuite à partir de la console:
la source
tl; dr
Je sais que c'est vieux, mais getoptlong n'a pas été mentionné ici et c'est probablement la meilleure façon d'analyser les arguments de la ligne de commande aujourd'hui.
Analyse des arguments de ligne de commande
Je recommande fortement getoptlong . Il est assez facile à utiliser et fonctionne comme un charme. Voici un exemple extrait du lien ci-dessus
Vous pouvez l'appeler comme ça
ruby hello.rb -n 6 --name -- /tmp
Ce que l'OP essaie de faire
Dans ce cas, je pense que la meilleure option est d'utiliser des fichiers YAML comme suggéré dans cette réponse
la source