0 votos positivos 0 votos negativos
217 visitas
em Shell GNU por curioso (1,3K pontos)
recategorizado por

Eu estou estudando sobre Docker e containeres, e acabei me deparando com o script abaixo, que é o entrypoint para um container, e me surgiu a dúvida sobre qual a função desse exec "$@", foi a única linha do script que não entendi o que faz!!!!

#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

python manage.py flush --no-input
python manage.py migrate

exec "$@"

1 Resposta

1 voto positivo 0 votos negativos
por monitor (15,8K pontos)
selecionada por
 
Melhor resposta

Em um script em shell, a variável especial @ armazenará todos os parâmetros passados na linha de comando quando o script for executado. Por exemplo:

:~$ ./script.sh banana laranja

Internamente, script.sh receberá os seguintes valores em 3 variáveis identificadas por:

0 - O caminho e o nome do script (./script.sh)
1 - O primeiro parâmetro (banana)
2 - O segundo parâmetro (laranja)

Se houver mais parâmetros, eles também serão armazenados em variáveis identificadas pelos números subsequentes, por isso essas variáveis especiais são chamadas de parâmetros posicionais (sim, no shell nós chamamos variáveis de parâmetros).

Além desses parâmetros posicionais numerados, nós ainda temos dois parâmetros especiais que armazenam tudo que for passado após o nome do script na linha de comandos: @ e *. No meu exemplo, ambos receberiam o valor banana laranja.

Portanto, na última linha do seu script, o comando exec receberá como argumentos todos os parâmetros posicionais armazenados em @ que eventualmente tiverem sido passados na execução do script.

Seja bem-vindo(a) à comunidade debxp, onde você pode fazer perguntas e receber respostas de outros membros.
Atenção pessoal, esta plataforma não é um fórum, embora se pareça muito com um. Neste tipo de ferramenta, o objetivo é fazer e responder perguntas que possam resultar em material de consulta para outras pessoas que tenham as mesmas dúvidas e dificuldades. Portanto, não há sentido em utilizarmos o Ask para socialização, para emitir opiniões pessoais ou para perguntas do tipo "quem usa isso ou aquilo". Espero que compreendam o nosso propósito. :-)
...