Problema
Eu tenho um script que aceita alguns argumentos de linha de comando diferentes (opcionais). Para um argumento específico, estou obtendo o valor "menos", 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, é isso que vejo:
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 por que estou obtendo o valor "menos" no pager. Eu esperava ver uma string vazia. Se você pode ver o meu bug, por favor me avise. Eu estive olhando para isso por muito tempo.
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 em maiúsculas como suas.
PAGER
é uma variável de ambiente comumente usada (comoEDITOR
). Alguns exemplos de menções em páginas de manual:man (embora priorize
MANPAGER
):git:
Se o seu script usar a variável em algum outro significado além de manter o nome do programa para o qual canalizar a saída, sugiro usar outro nome apenas para maior clareza. Independentemente disso, lembre-se de que o ambiente circundante pode passar qualquer variável; portanto, se você quiser garantir que uma variável esteja vazia, terá que atribuir explicitamente a string vazia a ela. Ou
unset
, se você quiser que não esteja definido.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.