아래 답변 결과

아래 답변 결과

나는 이와 같은 수업을 듣는 스크립트를 가지고 있습니다 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

관련 정보