Como especificar -? opção com o GNU getopt

6

Ao analisar argumentos de linha de comando com o comando GNU getopt , como (se possível) reconheço -? como outra opção? Existe uma maneira de escapar disso no opstring?

    
por mschonaker 28.06.2011 / 03:14

3 respostas

4

O comando getopt do GNU usa o GNU getopt () função de biblioteca para faça a análise dos argumentos e opções.

A página man getopt (3) afirma:

If getopt() does not recognize an option character, it prints an error message to stderr, stores the character in optopt, and returns ?. The calling program may prevent the error message by setting opterr to 0.

Portanto, ? é usado para sinalizar "opção desconhecida" e não pode ser usado como um valor de opção. (Seria impossível dizer a opção -? de uma opção desconhecida.)

    
por 28.06.2011 / 09:38
2

Mesmo se você puder reconhecer que, como uma string de opção, seria uma má idéia usar o caractere de ponto de interrogação como um argumento real, porque a maioria dos shells usam isso como parte de sua sintaxe glob ( representando que o personagem antes dele é opcionalmente usado ou não na partida). Passar um ? litteral seria difícil para os usuários porque eles teriam que escapar dele.

Se você estiver criando uma opção de ajuda de algum tipo, a sintaxe usual é procurar opções curtas e longas de -h e --help .

    
por 28.06.2011 / 10:02
1

Para obter o efeito de usar o ponto de interrogação para ajuda , tente simplesmente verificar se a opção desconhecida está ocultando o caractere de ponto de interrogação.

Por exemplo, desejo imprimir uma mensagem "Opção desconhecida" sempre que a opção desconhecida NÃO for o ponto de interrogação. Em seguida, sempre chamo a minha função uso .

\?) if [ "$OPTARG" != "?" ] ; then echo "Unknown option \"$OPTARG\"" ; fi
        usage

Em geral, eu concordo e uso a opção h para ajuda e a opção u para usage , mas eu já usei as para host e user e gostei desse modo.

PS. Estou usando o bash no Solaris 10.

    
por 10.06.2015 / 09:57