以下の回答結果

以下の回答結果

私はこのようなクラスを聞くスクリプトを持っていますgitploy up -t 2.0.0 test_repo。すぐに「ジョブ」を取り出し、オプションを処理する前に「ジョブ」を取得upできる必要があります。test_repoそれが妥当であれば、私はこれらの主張を失いたくありません。基本的に私はtest_repoその場を最初に占めたい

while getopts "zhvdurqw:c:i:e:o:b:t:f:p:g" opt; do
  case $opt in

    #flag----------------------
    h)
      usage;
      exit 0
      ;;
    #callback------------------
    c) queue_callback "$OPTARG"
      shift $((OPTIND-1)); OPTIND=1
      ;;
### so one and so forth

スクリプト部分。だから基本的に私はこれを行うことができます

# i would get the first argument after the options here first so "test_repo" 
# would be a $@ or $* or something?
root_arg="test_repo"

while getopts "zhvdurqw:c:i:e:o:b:t:f:p:g" opt; do
  case $opt in

    #flag----------------------
    h)
      usage;
      exit 0
      ;;
    #callback------------------
    c) queue_callback "$OPTARG"
      echo "$root_arg was here"
      shift $((OPTIND-1)); OPTIND=1
      ;;
### so one and so forth

より広い範囲で私の思考の質問は次のとおりです。「オプションに関連する場所ごとにパラメータを取得するには?


質問を修正:

こんな言葉でもしたらよかったのに。

  • varコマンドのgetopts出力位置
  • getoptsを呼び出して位置出力に+1
    • test_repogetopts出力後のパラメータ+1
  • 正常な処理を行う

以前のバージョンとの互換性のためにこのコマンドを移動しないようにしていますが、これに限定されません。モードがすでにに設定されていることがわかっているので、ここに少しのシムを作成できると思いましたgitploy <__action> [__options] <__alias> [__remote_url]

私はすべてをオプションにして他の主張を捨てることができると思います。これが悪いアプローチであるかどうかはわかりませんが、<__alias>(またはtest_repo例に示すように)順次スキャンして次のオプションで見つける必要があるようです-a test_repo

これが正しいアプローチではない場合でも、ここで「カーソルを読んで」パラメータ値を決定できるかどうか、または不可能かどうかを知りたいです。

以下の回答結果

while getopts "zhvdurqw:c:i:e:o:b:t:f:p:g" opt; do
    case "$opt" in
    esac
done

index="$((OPTIND))"
GD_REPO="${!index}";
OPTIND=1

これが私がしたことです。早く巻き戻して巻き戻すのは汚いトリックのように見えるかもしれませんが、うまくいきます。より良いアイデアがあれば、喜んで学びたいです。

ベストアンサー1

お客様のリクエストは論理的に矛盾します。などの入力が与えられた場合は、オプションの有無と引数を取ることにgitploy up -t 2.0.0 test_repo特に注意しながらオプションを解析する必要があります。これにより、オプションではなく最初の引数が何であるかを識別できます。-ttest_repo

それではまず分析するオプションは大丈夫です。これにより、最初のオペランドが何であるかがわかります。その瞬間、プロセスオプション。オプションに関する必須情報を変数に保存します。

action="$1"
shift
unset t_arg
while getopts "zhvdurqw:c:i:e:o:b:t:f:p:g" opt; do
  case "$opt" in
    c) c_arg="$OPTARG";;
  esac
done
shift "$((OPTIND-1))"
root_arg="$1"

if [ -n "${c_arg+1}" ]; then
  queue_callback "$OPTARG"
  echo "$root_arg was here"
fi

おすすめ記事