bash script: valor do argumento incorreto sendo definido

4

Problema

Eu tenho um script que aceita alguns argumentos de linha de comando diferentes (opcionais). Para um argumento em particular, estou recebendo o valor "less", mas não sei por quê.

Código Bash

while getopts ":d:f:p:e:" o; do
  case "${o}" in
        d)
            SDOMAIN=${OPTARG}
            ;;
        f)
            FROM=${OPTARG}
            ;;
        p)
            PAGER=${OPTARG}
            ;; 
        e)
            DESTEXT=${OPTARG}
            ;;                       
        *)
            show_usage
            ;;          
    esac
done

source "./utils.sh"
test #test includes

echo "$SDOMAIN is the sdomain"
echo "$FROM is the from"
echo "$PAGER is the pager"
echo "$DESTEXT is the extension"

exit

Resultado

Quando executo meu script, vejo o seguinte:

lab-1:/tmp/jj# bash mssp.sh -d testdomain.net         
Utils include worked!                                       
testdomain.net is the sdomain                                               
 is the from                                                                    
less is the pager                                                               
 is the extension                                 

Não consigo ver porque estou obtendo o valor "menor" no pager. Eu estava esperando ver uma corda vazia. Se você pode ver meu bug, por favor me avise. Eu tenho olhado isso por muito tempo.

    
por dot 14.02.2018 / 21:33

2 respostas

10

Seu script nunca define PAGER, mas essa variável provavelmente é exportada de seu ambiente atual; verifique com declare -p PAGER .

Eu recomendaria usar um nome de variável diferente dentro do seu script; É por isso que há uma recomendação geral contra o uso de variáveis maiúsculas como se fosse sua.

    
por 14.02.2018 / 21:39
4

PAGER é uma variável de ambiente comumente usada (como EDITOR ). Alguns exemplos disso estão sendo mencionados nas man pages:

man (embora priorize MANPAGER ):

-P pager, --pager=pager
Specify which output pager to use. By default, man uses pager. This option overrides the $MANPAGER environment variable, which in turn overrides the $PAGER environment variable.

git:

-p, --paginate
Pipe all output into less (or if set, $PAGER) if standard output is a terminal. This overrides the pager.<cmd> configuration options (see the "Configuration Mechanism" section below).

Se o seu script usar a variável em algum outro significado além de manter o nome do programa para o pipe pipe, sugiro usar outro nome apenas para maior clareza. Independentemente disso, lembre-se de que o ambiente circundante pode passar em qualquer variável , por isso, se você quiser ter certeza de que uma variável está vazia, você terá que atribuir explicitamente a string vazia a ela. Ou unset , se você quiser desfeito.

Embora esta seja uma decisão que você precisará tomar. Alguns usuários podem apreciar a possibilidade de passar itens de configuração pelo ambiente.

    
por 14.02.2018 / 21:51