Подкоманды с bash

Можно ли реализовать подкоманды для скриптов bash. Я имею в виду что-то вроде этого:

http://docs.python.org/dev/library/argparse.html

1 ответ

Решение

Вот простая небезопасная техника:

#!/bin/bash

clean() {
  echo rm -fR .
  echo Thanks to koola, I let you off this time,
  echo but you really shouldn\'t run random code you download from the net.
}

help() {
  echo Whatever you do, don\'t use clean
}

args() {
  printf "%s" options:
  while getopts a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z: OPTION "$@"; do
    printf " -%s '%s'" $OPTION $OPTARG
  done
  shift $((OPTIND - 1))
  printf "arg: '%s'" "$@"
  echo
}

"$@"

Это все очень круто, но это не ограничивает подкоманду. Так что вы можете заменить последнюю строку на:

if [[ $1 =~ ^(clean|help|args)$ ]]; then
  "$@"
else
  echo "Invalid subcommand $1" >&2
  exit 1
fi

Некоторые системы позволяют ставить "глобальные" опции перед подкомандой. Вы можете положить getopts цикл перед выполнением подкоманды, если вы хотите. Запомни shift прежде чем попасть в выполнение подкоманды; также сбросить OPTIND 1, чтобы подкоманды getopts не запутались.

Другие вопросы по тегам