como fazer o getopts apenas leia o primeiro caractere post '-'

3

Eu tenho um script de shell testShell.sh que usa getopts como abaixo:

#!/bin/bash
while getopts ":j:e:" option; do
    case "$option" in
        j) MYHOSTNAME=$OPTARG ;;
        e) SCRIPT_PATH=$OPTARG ;;
        *) ;;
    esac
done

echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"

Quando executo o teste, gosto de seguir:

$ testShell.sh  -jvalue1 -evalue4 -Djvalue3  -pvalue2

A saída que recebo é a seguinte:

j=value3
e=2
remaining=

Mas eu gostaria que a saída fosse:

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

É possível garantir que getopts apenas analise o primeiro caractere post - símbolo? para que ele não seja exibido t interpretar -Djvalue3 como -jvalue3 e -pvalue2 como -e2 .

    
por SiB 01.08.2012 / 10:17

2 respostas

1

Depois de postar em 3 fóruns e pesquisar em todos os lugares ... eventualmente tentei o seguinte e funcionou ...

testShell.sh  -jvalue1 -evalue4 -- -Djvalue3  -pvalue2

Aviso

--  

depois de -evalue4

E a saída foi

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

Acredito que -- pede getopts para interromper as opções de processamento.

    
por 01.08.2012 / 12:10
3

tente isto:

$ ./testShell.sh  -j value1 -e value4 -D jvalue3  -p value2
j=value1
e=value4
remaining=jvalue3 -p value2

Observe os espaços entre as opções e as strings de opção.

help getopts diz:

OPTSTRING contains the option letters to be recognized; if a letter
is followed by a colon, the option is expected to have an argument,
which should be separated from it by white space.

i.e. o espaço entre a opção e qualquer cadeia de opções é necessário.

Se você precisar de mais do que o getopt integrado do bash é capaz, o utilitário / usr / bin / getopt suporta opções longas e curtas, com ou sem espaços entre as opções e a cadeia de opções. também suporta recursos extras como argumentos opcionais de strings.

BTW, / usr / bin / getopt está disponível no pacote util-linux no debian e derivados como o ubuntu ... não sei sobre outras distros ou * nixes, mas a fonte estará disponível a partir dos arquivos debian se você puder ' Não o encontre em nenhum outro lugar.

    
por 01.08.2012 / 11:57