Gostaria de executar um script em uma máquina host ( script_on_host.sh
), que então alcança dentro de um contêiner docker para obter alguns dados usando um segundo script (script_in_container.sh
). Os dados estão disponíveis somente dentro do contêiner, e não diretamente do host, daí o motivo de fazer dessa forma.
Estou com problemas para passar dados entre os dois scripts. Tentei o seguinte:
script_em_container.sh
#!/bin/bash
x=1
y=2
z=6.3
echo $x
echo $y
echo $z
script_no_host.sh
#!/bin/bash
results=$(docker exec mycontainer './script_in_container.sh')
X=$results(1)
Y=$results(2)
Z=$results(3)
Mas ele gera um erro. Alguém pode me ajudar com isso? Existe uma maneira legal ou mais padrão de passar variáveis dessa forma? Sinto que talvez esteja fazendo algo um pouco desajeitado aqui, usando echo para imprimir várias linhas do script do contêiner.
A solução mais simples seria usar
set --
a atribuição de variáveis do contêiner docker aos parâmetros posicionais assim:Você pode usar readarray para criar uma matriz de resultados delimitados por nova linha.
Você pode usar sed , assim:
A expressão sed é na verdade dois comandos:
1q
é um comando para corresponder à primeira linha e sair;
é um separador de comandod
exclui a linha atual.No caso de ler a primeira linha, isso
d
é meio redundante, já que o sed irá sair depois de imprimir a linha 1 de qualquer maneira, mas para outras linhasd
é necessário excluir quaisquer linhas que não correspondam ao seu primeiro comando.