4

bash スクリプトのサブコマンドを実装することは可能ですか。私はこのようなことを念頭に置いています:

http://docs.python.org/dev/library/argparse.html#sub-commands

4

1 に答える 1

8

これは単純で危険なテクニックです:

#!/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また、サブコマンド getopts が混乱しないように、1にリセットします。

于 2012-11-30T04:11:02.467 に答える