J'ai quelques tâches de script shell simples que je veux faire
Par exemple: sélectionner un fichier dans le répertoire de travail à partir d'une liste de fichiers correspondant à une expression régulière.
Je sais que je peux faire ce genre de chose en utilisant bash et grep standard, mais je serais bien de pouvoir pirater des scripts rapides qui fonctionneront sous Windows et Linux sans que je doive mémoriser un tas de programmes de ligne de commande et d'indicateurs, etc.
J'ai essayé de faire avancer les choses mais j'ai fini par me demander où je devrais obtenir des informations telles qu'une référence au répertoire actuel
La question est donc de savoir quelles parties des bibliothèques Ruby dois-je connaître pour écrire des scripts shell ruby?
Réponses:
Par défaut, vous avez déjà accès à Dir et File , qui sont assez utiles en eux-mêmes.
FileUtils est également utile à partir du stdlib
Ce qui est plutôt sympa
la source
Comme les autres l'ont déjà dit, votre première ligne devrait être
Et vous devez également le rendre exécutable: (dans le shell)
Puis suit le code ruby. Si vous ouvrez un fichier
le fichier est ouvert dans le répertoire actuel que vous obtiendrez
pwd
dans le shell.Le chemin d'accès à votre script est également simple à obtenir. Avec
$0
vous obtenez le premier argument du shell, qui est le chemin relatif de votre script. Le chemin absolu peut être déterminé comme ça:Pour les opérations du système de fichiers, j'utilise presque toujours Pathname. Il s'agit d'un wrapper pour de nombreuses autres classes liées au système de fichiers. Aussi utile: Dir, File ...
la source
Voici quelque chose d'important qui manque dans les autres réponses: les paramètres de ligne de commande sont exposés à votre script shell Ruby via le tableau ARGV (global).
Donc, si vous aviez un script appelé my_shell_script:
... rendez-le exécutable (comme d'autres l'ont mentionné):
Et appelez-le comme ça:
Vous obtiendrez ceci:
Les arguments fonctionnent bien avec l'expansion des noms de fichiers:
La plupart de cela ne fonctionne que sous UNIX (Linux, Mac OS X), mais vous pouvez faire des choses similaires (bien que moins pratiques) sous Windows.
la source
Il y a beaucoup de bons conseils ici, alors je voulais en ajouter un peu plus.
Les backticks (ou back-ticks) vous permettent de faire des scripts beaucoup plus facilement. Considérer
Si vous rencontrez des problèmes pour obtenir la sortie des backticks, le truc va à err standard au lieu de standard out. Utilisez ces conseils
Les backticks effectuent une interpolation de chaîne:
Vous pouvez également canaliser à l'intérieur de Ruby . C'est un lien vers mon blog, mais il renvoie ici, donc ça va :) Il y a probablement des choses plus avancées sur ce sujet.
Comme d'autres l'ont noté, si vous voulez être sérieux, il y a Rush: pas seulement comme un remplacement de shell (ce qui est un peu trop loufoque pour moi) mais aussi comme une bibliothèque pour votre utilisation dans les scripts et programmes shell.
Sur Mac, utilisez Applescript dans Ruby pour plus de puissance. Voici mon
shell_here
script:la source
Allez vous procurer une copie de Everyday Scripting avec Ruby . Il contient de nombreux conseils utiles sur la façon de faire les types de choses que vous souhaitez faire.
la source
Cela peut également être utile: http://rush.heroku.com/
Je ne l'ai pas beaucoup utilisé, mais ça a l'air plutôt cool
Depuis le site:
la source
disons que vous écrivez votre
script.rb
script. mettre:comme première ligne et faire un
chmod +x script.rb
la source
Lorsque vous souhaitez écrire des scripts ruby plus complexes, ces outils peuvent vous aider:
Par exemple:
thor (un framework de script)
gli (git comme interface)
méthadone (pour créer des outils simples)
Ils vous donnent un démarrage rapide pour écrire vos propres scripts, en particulier «application en ligne de commande».
la source
La réponse ci-dessus est intéressante et très utile lors de l'utilisation de Ruby comme script shell. Pour moi, je n'utilise pas Ruby comme langage quotidien et je préfère utiliser ruby uniquement comme contrôle de flux et utiliser toujours bash pour faire les tâches.
Certaines fonctions d'assistance peuvent être utilisées pour tester le résultat de l'exécution
Avec helper, le script ruby pourrait être bash:
la source
"Comment écrire ruby" est un peu au-delà de la portée de SO.
Mais pour transformer ces scripts ruby en scripts exécutables, mettez ceci comme première ligne de votre script ruby:
Ensuite, rendez le fichier exécutable:
et c'est parti.
la source
Placez-le au début de votre script.rb
Puis marquez-le comme exécutable:
la source
La réponse par webmat est parfaite. Je veux juste vous signaler un ajout. Si vous devez beaucoup gérer les paramètres de ligne de commande pour vos scripts, vous devez utiliser optparse . C'est simple et vous aide énormément.
la source
Dans ruby, la constante
__FILE__
vous donnera toujours le chemin du script que vous exécutez.Sous Linux,
/usr/bin/env
votre ami est-il:Sous Windows, cela dépend si les fichiers .rb sont associés ou non à ruby. Si ils sont:
S'ils ne le sont pas, vous devez invoquer explicitement ruby sur eux, j'utilise un fichier intermédiaire .cmd:
mon_script.cmd:
mon_script.rb:
la source