Passa params para getopt de um script que não usa getopt

0

Eu tenho um script (vamos chamá-lo scriptC ) que usa getopt para analisar opções curtas e longas e funciona bem.

Esse script está sendo chamado assim:
scriptA runs scriptB , que chama scriptC com os parâmetros apropriados.

Pergunta: É possível passar os mesmos parâmetros que os argumentos para scriptA e, em seguida, esses serão passados eventualmente para scriptC ?
Os scripts são chamados como: scriptB "$@" e scriptB , eventualmente, scriptC —param1 —param2

    
por Jim 22.05.2018 / 09:53

1 resposta

1

Se scriptA chama scriptB como

scriptB "$@"

os argumentos da linha de comando usados para chamar scriptA serão passados para scriptB , desde que não tenham sido alterados antes da chamada.

Da mesma forma, para a chamada de scriptB para scriptC .

Contanto que scriptA e scriptB não tentem interpretar, alterar ou alterar o conteúdo de $@ (ou os parâmetros posicionais individuais $1 , $2 , $3 etc.), os argumentos da linha de comando serão passados para scriptC para serem analisados com getopt .

Exemplo usando funções em vez de scripts (funciona da mesma forma):

#!/bin/sh

scriptC () {
    printf 'Arg: %s\n' "$@"
}

scriptB () {
    scriptC "$@"
}

scriptA () {
    scriptB "$@"
}

scriptA -param1 -param2

Isso produzirá a saída

Arg: -param1
Arg: -param2

Fazendo a chamada como

scriptA "hello world" --param1 /etc/passwd --param2

produzirá

Arg: hello world
Arg: --param1
Arg: /etc/passwd
Arg: --param2

Ou seja, os parâmetros serão passados para scriptC sem modificação. Em seguida, é deixado para scriptC interpretar os parâmetros usando getopt , getopts ou por outros meios.

    
por 22.05.2018 / 10:20