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