私はこのようなクラスを聞くスクリプトを持っています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_repo
getopts出力後のパラメータ+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
特に注意しながらオプションを解析する必要があります。これにより、オプションではなく最初の引数が何であるかを識別できます。-t
test_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