EDIT: Per favore , per favore , per favore leggi i due requisiti elencati in fondo a questo post prima di rispondere. Le persone continuano a pubblicare le loro nuove gemme e librerie e quant'altro, che chiaramente non soddisfano i requisiti.
A volte voglio hackerare in modo molto economico alcune opzioni della riga di comando in un semplice script. Un modo divertente per farlo, senza occuparsi di getopts o parsing o qualcosa del genere, è:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Non è proprio la normale sintassi delle opzioni Unix, perché accetterà parametri della riga di comando opzioni non opzioni, come in " myprog -i foo bar -q
", ma posso conviverci. (Alcune persone, come gli sviluppatori di Subversion, preferiscono questo. A volte lo faccio anch'io.)
Un'opzione che è solo presente o assente non può essere implementata molto più semplicemente di quanto sopra. (Un compito, una chiamata di funzione, un effetto collaterale.) Esiste un modo altrettanto semplice per gestire le opzioni che accettano un parametro, come " -f
nomefile "?
MODIFICARE:
Un punto che non ho fatto in precedenza, perché non mi era diventato chiaro fino a quando l'autore di Trollop ha menzionato che la libreria si adatta "in un file [800-line]", è che non sto cercando solo un file pulito sintassi, ma per una tecnica che ha le seguenti caratteristiche:
L'intero codice può essere incluso nel file di script (senza sovraccaricare lo script stesso, che può essere solo un paio di dozzine di righe), in modo che si possa rilasciare un singolo file in una directory
bin
su qualsiasi sistema con uno standard Ruby 1.8 [5-7] installazione e utilizzarlo. Se non puoi scrivere uno script Ruby che non abbia istruzioni require e dove il codice per analizzare un paio di opzioni è inferiore a una dozzina di righe o giù di lì, fallisci questo requisito.Il codice è abbastanza piccolo e semplice da ricordarne abbastanza per digitare direttamente il codice che farà il trucco, piuttosto che tagliare e incollare da qualche altra parte. Pensa alla situazione in cui ti trovi sulla console di un server protetto da firewall senza accesso a Internet e desideri creare uno script rapido da utilizzare per un client. Non so voi, ma (oltre a non soddisfare il requisito di cui sopra) memorizzare anche le 45 righe di micro-optparse semplificato non è qualcosa che mi interessa fare.
getoptlong
e optparse
sono nella libreria ruby standard, quindi non DEVI copiarli durante la distribuzione del tuo script - se ruby funziona su quella macchina, allora require 'optparse'
o require 'getoptlong'
funzionerà anche.