;;;; run.lisp -- run a command (in-package :oneliners.cli.app) (defun run/options () (list (make-option :integer :short-name #\t :long-name "timeout" :key :timeout :initial-value 1 :description "Seconds to wait for output before giving up.") (make-option :flag :short-name #\v :long-name "verbose" :key :verbose :description "echoes the oneliner text that is about to be run") (make-option :flag :short-name #\c :long-name "confirm" :key :confirm :description "prompts the user for confirmation before running the command"))) (defun run/handler (cmd) (a:if-let (args (cli:command-arguments cmd)) (ol::run-item (first args) (rest args) :verbose (cli:getopt cmd :verbose) :confirm (cli:getopt cmd :confirm) :timeout (cli:getopt cmd :timeout)) (cli:print-usage-and-exit cmd t))) (defparameter +run/examples+ '(("Run a hypothetical command called echo-stuff with positional arguments" . "ol run echo-stuff one two three") ("Run a hypothetical command with id 341 with a timeout and confirmation" . "ol run -c -t 10 341"))) (defun run/command () (cli:make-command :name "run" :usage " [ARG ...]" :description "run the identified oneliner with any arguments it might take" :options (run/options) :handler #'run/handler :examples +run/examples+))