Melhor maneira de verificar se uma opção é suportada por um comando

0

Gostaria de verificar se um comando em um determinado host oferece suporte a uma determinada opção, de maneira robusta.

Meu caso de uso está verificando se o comando nc local suporta a opção -w timeout.

Minha primeira ideia é executar o comando com a opção e, em seguida, verificar o valor retornado:

<command> <option> ...
[ $? -ne 0 ] && echo "NOT SUPPORTED"

Este método está em conflito com outras razões de erro que podem gerar um valor diferente de zero em retorno.

Por exemplo, eu tenho um soquete Unix de escuta em 192.168.1.122:3888 , enquanto no meu localhost eu quero testar a opção nc do tempo limite (que supomos não ser suportado):

> nc 192.168.1.122 3999 < /dev/null 2>/dev/null
> echo $?
1
> nc 192.168.1.122 3888 -w 1 < /dev/null 2>/dev/null
> echo $?
1

Você vê, pelo valor retornado, eu não discerniria entre uma situação de erro de porta errada e uma chamada errada devido a um argumento não suportado.

Existem outras opções, talvez preferenciais?

    
por Campa 16.04.2018 / 12:07

1 resposta

3

Como o comportamento dos comandos em relação à manipulação de linha de comando difere muito, é impossível criar uma solução geral. Para cada caso, você precisa encontrar maneiras de decidir quais opções de linha de comando são realmente suportadas. Se você quiser proteger contra um comportamento catastrófico (por exemplo, uma versão incomum do nc que faz coisas ruins quando chamada com uma opção -w), sua única opção é manter uma lista de versões conhecidas com suas opções de linha de comando suportadas e recusar trabalhe com uma versão de comando que não esteja nesta lista: -)

    
por 16.04.2018 / 12:19

Tags