Concatena e usa a variável multi-linha na execução de curl multi-linha

0

Com este código

#!/bin/bash
set -x
PROPERTIES="MAINTAINER=Self, My"

while IFS='=' read -r key value
do
  ADDITIONAL_PARAMETERS+="-F variables[${key}]=${value} "
done <<< "${PROPERTIES}"
#ADDITIONAL_PARAMETERS="$(echo -e "${ADDITIONAL_PARAMETERS}" | sed -e 's/[[:space:]]*$//')"

curl -k -X POST -F token=TOKEN -F "ref=master" \
-F "variables[GIT_REF]=GIT_REF" \
-F "variables[GIT_COMMIT]=GIT_COMMIT" \
${ADDITIONAL_PARAMETERS} \
https://gitlab.url.net

Estou tentando passar várias propriedades desconhecidas como parâmetros de criação para um pipeline do GitLab.

O problema parece ser as citações geradas na posição errada, levando à seguinte chamada e erro:

+ curl -k -X POST -F token=TOKEN -F ref=master -F 'variables[GIT_REF]=GIT_REF' -F 'variables[GIT_COMMIT]=GIT_COMMIT' -F 'variables[MAINTAINER]=Self,' My https://gitlab.url.net
curl: (6) Couldn't resolve host 'My'
curl: (6) Couldn't resolve host 'gitlab.url.net

De onde vêm as citações simples e por que a segunda cotação no meio da variável? -F 'variables[MAINTAINER]=Self,' My

    
por BlackEye 16.10.2018 / 18:02

2 respostas

2

Você realmente precisa usar matrizes para esse tipo de coisa: link

#!/bin/bash
properties="MAINTAINER=Self, My"

curl_opts=(
    -k 
    -X POST 
    -F token=TOKEN 
    -F "ref=master" 
    -F "variables[GIT_REF]=GIT_REF" 
    -F "variables[GIT_COMMIT]=GIT_COMMIT" 
)

while IFS='=' read -r key value; do
    curl_opts+=( -F "variables[$key]=$value" )
done <<< "$properties"

curl "${curl_opts[@]}" https://gitlab.url.net

Este código não está apenas correto, mas o IMO é muito mais fácil de ler.

Além disso, não use ALL_CAPS_VARNAMES: considere aqueles reservados pelo shell.

    
por 16.10.2018 / 23:34
1

set -x adicionou as aspas simples para tornar a saída reutilizável.

Você precisa citar ${ADDITIONAL_PARAMETERS} as "${ADDITIONAL_PARAMETERS}" , caso contrário, ele estará sujeito à divisão de palavras e expansão de nome de arquivo. A divisão de palavras aconteceu com você:

variables[MAINTAINER]=Self, My

foi dividido em:

variables[MAINTAINER]=Self,

e:

My

como foi passado para o comando curl .

    
por 16.10.2018 / 18:08