(Shell Script) A variável não passa corretamente ao buscar o valor do arquivo?

1

Eu tenho esta seção do comando curl dentro do meu shell script que causou um erro de 500 voltas do servidor. No entanto, esse código funciona quando eu manualmente executo o comando.

curl -qgsSkH "Content-Type: multipart/form-data" --no-progress-bar --header "Token: $authKey" -F "filename=@$compressedFileName" -F "options={\"application\":\"2\",\"timeout\":\"5000\"}" https://www.domain.com > results.txt

Alguém tem alguma ideia do porquê?

Editar: Fiz algumas depurações manuais e descobri que o problema é causado pela variável $ authKey. Essa variável é buscada pelo seguinte código no meu script.

# Get authentication key from FireEye AX response
while read line
do
    if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
    then
        authKey="${BASH_REMATCH[1]}"
    fi
done <auth.txt

Se eu redefinir essa variável usando algo como o seguinte, o script funcionará.

authKey="TheAuthenticationKey"

Mas por que isso está acontecendo? A parte anterior onde eu passo a string do arquivo quando a li linha por linha já está passando o valor correto (verifiquei novamente fazendo eco da saída para um arquivo txt).

Editar Eu consegui detalhar mais alguma coisa. Quando eu tento ecoar o valor do token para um arquivo e adicionar "ao início e ao fim da string eu tenho esse resultado.

"X-FeApi-Token: IDR+jxU1kB5ZpXsRNAgqfjTxkjZ0L2atH+l0H/NeatWDAJs=
"

Não sei como remover essa nova linha. Alguém pode aconselhar?

    
por Norman 05.11.2015 / 07:18

2 respostas

1

O problema parece ser causado por uma nova linha ou retorno de carro e nova linha em $ authKey, como fornecido por "FireEye AX"

Você pode retirar os retornos de carro e os avanços de linha passando-os por tr -d '\r\n'

por exemplo.

# Get authentication key from FireEye AX response
while read line
do
    if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
    then
        authKey="${BASH_REMATCH[1]}"
        authKey=$(printf "%s" "$authKey" | tr -d '\r\n')
    fi
done <auth.txt

Não me lembro se o $ BASH_REMATCH foi passado para uma subshell ... você pode tentar em uma linha, talvez funcione:

authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')
    
por 05.11.2015 / 10:47
1

Eu estou supondo que o arquivo de dados que você foi fornecido tem finais de linha no estilo do Windows (CR / LF) em vez de terminações de linha Unix / Linux (LF).

Esta correspondência de padrão alternativo excluirá qualquer possível RC de fuga:

[[ $line =~ ^SOME-PATTERN:[[:space:]](([^5]*) ]]
authKey="${BASH_REMATCH[1]}"
    
por 05.11.2015 / 13:48

Tags