Não use function port()
- na verdade, não faz sentido. Ao declarar uma função bash
ou ksh
com o comando function
você não usa o ()
, mas o shell aceita como uma sintaxe perdoável oops e age como se você não tivesse usado function
. Então não faça.
port()
case ${1:--} in (B) OPT_B=8000;; (*[!0-9]*)
! printf 'chosen value %s not in %s\n' \
"${1:-''}" "'1 - 10000'" ;;
(*) [ "$(( $1>0 && $1<10001 ))" -ne 0 ] &&
echo "chosen value '$1'" ||
port "'$1'" ;;
esac
Essa é uma maneira POSIXly correta de escrever sua função (exceto que o acima retorna corretamente em caso de erro) . Se o acima estivesse em um script de shell diferente de $0
e eu quisesse chamar essa função de qualquer maneira, provavelmente faria:
eval "$(sed '/^port()/,$!d;/esac/q' /path/to/script_containing_port.sh)"
port B #or whatever
... se eu pudesse ter certeza de que a primeira ocorrência de ^port()
nesse script definitivamente significava o início da função que queria declarar. Senão, se a função estivesse em um script próprio, eu faria:
. /path/to/port.fn.sh; port B
Por fim, você provavelmente não deve nomear seus arquivos de script something.sh a menos que eles realmente sejam sh
scripts - o que significa que, se você escrever um nome de script bash
, something.bash
. Não faz sentido de outra forma.