O que “set -” faz neste entrypoint do Dockerfile?

20

Estou tentando entender o que este ponto de entrada do Docker .

Parece-me que é um padrão muito comum quando escrevo Dockerfiles, mas minhas habilidades bash são limitadas e eu não tenho idéia de todos os símbolos especiais do basquete kung fu.

Além disso, é difícil pesquisar no Google por "-", "$!" etc. Quais são esses chamados no mundo bash?

Para resumir, qual é a linha abaixo tentando fazer?

if [ "${1#-}" != "$1" ]; then
  set -- haproxy "$@"
fi
    
por Lucas Pottersky 06.09.2016 / 20:56

1 resposta

28

O comando set (quando não está configurando opções) define os parâmetros posicionais eg

$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c

O -- é o padrão "não trate nada seguindo isso como uma opção"

Os "$@" são todos os parâmetros de posição existentes.

Então a sequência

set -- haproxy "$@"

Colocará a palavra haproxy na frente de $1 $2 etc.

por exemplo

$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4   
haproxy,a,b,c
    
por 06.09.2016 / 21:07