Na string de opção ao usar getopts
, de http://wiki.bash-hackers.org/howto/getopts_tutorial
Se o primeiro caractere da string de opção for um : (dois pontos), o que normalmente não faria sentido porque não há nenhuma letra de opção precedendo-o, getopts mudará para "modo de relatório de erro silencioso" . Em scripts produtivos, isso geralmente é o que você deseja, porque permite que você mesmo lide com os erros sem ser perturbado por mensagens irritantes.
Eu queria saber o que os seguintes significam:
"modo de relatório de erro silencioso"
"permite que você mesmo lide com os erros sem ser incomodado por mensagens irritantes"?
Você poderia talvez dar alguns exemplos?
Se o primeiro caractere de
optstring
for dois pontos,getopts
não produzirá nenhuma mensagem de diagnóstico para argumentos de opção ausentes ou opções inválidas.Isso pode ser útil se você realmente precisar ter mais controle sobre as mensagens de diagnóstico produzidas por seu script ou se simplesmente não quiser que nada apareça no fluxo de erro padrão se o usuário fornecer opções de linha de comando instáveis.
No modo de relatório silencioso (com a inicial
:
), se você quiser alertar o usuário sobre uma opção inválida, deverá procurar?
na variável passada paragetopts
. Da mesma forma, para argumentos de opção ausentes, é um arquivo:
. Estes são os dois erros geralmente tratados porgetopts
si só, mas para fazer seu próprio relatório de erro para o usuário, você precisará capturá-los separadamente para poder fornecer a mensagem de diagnóstico correta.No modo de relatório não silencioso,
getopts
faz seu próprio relatório de erro no erro padrão e você só precisa capturar um*
para "qualquer erro".Compare estes dois exemplos:
O
*
caso detecta qualquer tipo de erro de análise da linha de comando.O
:
caso acima detecta erros de argumento ausente, enquanto o?
caso detecta erros de opção inválida (observe que?
precisa ser escapado ou citado para corresponder a um literal?
, caso contrário, corresponde a qualquer caractere único).Não silencioso,
getopts
imprime uma mensagem de erro:Silencioso,
getopts
não imprime sozinho:Assim, com os dois pontos para o modo silencioso, podemos imprimir nosso próprio erro no script do jeito que gostamos, em vez da mensagem fixa: