Pré-processar uma única opção

0

Eu tenho um script Shell (destinado a usuários Linux / Mac / Cygwin) que envolve um JAR executável.

Antes de passar os argumentos (forma longa ou curta) para o programa Java, eu preciso pré-processar uma única opção (ou seja, um caminho cujo diretório deve ser adicionado ao caminho de classe Java e o nome do arquivo que deve ser passado para o Programa Java).

getopt e getopts irão reclamar se eu não especificar TODAS as opções passadas para o script. No entanto, quero especificar apenas o que preciso pré-processar (em sua forma curta e longa).

Qual é a alternativa?

FYI, aqui está uma ilustração aproximada do que quero fazer:

#!/bin/sh

# extracts _FOLDER_ and _FILE_ from "--changelog"/"-c" option
# I need the add the _FOLDER_ to Java classpath
# and _FILE_ to my program
java -cp .:_FOLDER_:my.jar my.main.class ALL_OTHER_OPTIONS
    
por Rolf 07.11.2014 / 13:55

1 resposta

1

Você tem que analisar todas as opções (da mesma forma que o comando wrapped), ou então você precisa recorrer à heurística e estar preparado para falhar em muitos casos.

Supondo que você esteja escrevendo:

#! /bin/sh -
# process options
exec cmd "$@"

E cmd aceitam -a , -b , -c com argumento e -n , -p sem argumento e seu wrapper deseja saber qual é o argumento para -c .

Então, qual é o seu wrapper para fazer se o script for chamado como:

wrapper.sh -npc foo
wrapper.sh -b -c -n -ca-c
wrapper.sh -- -cx

Não é possível descobrir qual é o argumento para -c a menos que saiba que -n e -p não aceitam argumentos e -a , -b do.

Você pode usar heurística: procure um argumento que comece com - e contenha c e observe o que vem depois disso, mas isso falhará em todos os exemplos acima (exceto o primeiro, como acontece -n e -p não aceitam argumentos).

    
por 07.11.2014 / 14:06

Tags