bash getopts não vê flags após o primeiro argumento

2

Estou tentando manipular sinalizadores após o primeiro argumento no meu script bash, mas o getopts retorna apenas os sinalizadores antes do argumento.

or flag in getopts; do
    case $flag in
        d)
            echo "-d flag was triggered!" >&2
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            ;;
    esac
done

e quando eu executo, eu gostaria que neste exemplo a "flag fosse acionada!" string para imprimir três vezes, em vez de uma vez.

$ ./myscript.sh -d arg1 -d -d -d
getopts
-d (develop mode) was triggered!
    
por kelorek 30.10.2013 / 19:00

1 resposta

1

Confira este tutorial no GetOpt. Neste caso, parece que você tem negligenciado o seu opstring

tente algo como:

for flag in getopts "M:d:a"; do
    case $flag in
...

, o que significa que você espera possíveis opções válidas de -d -M e -a. o: indica que o -d e um opções tem um parâmetro (: vai antes da opção em questão), então você poderia invocá-lo como

./somescript -M -d sometext -a somemoretext

também não use opções duplicadas. ele terá resultados imprevisíveis em sistemas e camadas diferentes.

link

    
por 30.10.2013 / 20:13

Tags