Eu tenho um script que classifico como gitploy up -t 2.0.0 test_repo
. Eu pego a "ação" up
imediatamente, então eu preciso ser capaz de obter o test_repo
antes de processar as opções. Eu não quero perder os argumentos na linha, se isso faz sentido ... não quero mudar isso, apenas pegue e deixe ser? Basicamente eu quero pegar esse test_repo
spot antes de fazer
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
seção do script. Então basicamente eu posso fazer algo assim
# 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
Em um escopo mais amplo disso, talvez a questão seja a seguinte, "Como obter um argumento por posição em relação às opções?"
revisão da questão:
A esperança é dizer algo como
- positon de getopts output no comando em var
- chame a posição da saída de getopts +1
-
O argumento
test_repo
está localizado em +1 após a saída de getopts
- processa normal
Estou tentando não mover o comando por motivos de compatibilidade com versões anteriores para começar, mas não estou realmente limitado a isso. Eu imaginei que poderia escrever um pequeno shim aqui, pois sei que o padrão já está definido para gitploy <__action> [__options] <__alias> [__remote_url]
.
Eu acho que eu poderia fazer tudo uma opção e depreciar os outros argumentos. Não tenho certeza se é uma maneira ruim de fazer isso, mas parece que eu teria que digitalizar em uma ordem para procurar o <__alias>
(ou o test_repo
como apresentado no exemplo) e procurá-lo como uma opção como como -a test_repo
.
Mesmo que não seja o jeito certo de fazer isso no final, eu gostaria de ter uma resposta se você puder "ler o cursor" aqui e determinar o valor do argumento ou se é uma coisa impossível de fazer.
resultado da resposta abaixo
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
Isso foi o que acabei fazendo. Parece um truque sujo para avançar e retroceder, mas funciona. Se houver ideias melhores, ainda adoraria aprendê-las.