(Shell Script) ¿La variable no se pasa correctamente al recuperar el valor del archivo?

(Shell Script) ¿La variable no se pasa correctamente al recuperar el valor del archivo?

Tengo esta sección del comando curl dentro de mi script de shell que provocó una respuesta de error 500 del servidor. Sin embargo, este código funciona cuando ejecuto el comando manualmente.

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

Alguien tiene alguna idea de por qué?

Editar: Hice una depuración manual y descubrí que el problema es causado por la variable $authKey. Esta variable se obtiene mediante el siguiente código en mi 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

Si redefino esta variable usando algo como lo siguiente, entonces el script funcionará.

authKey="TheAuthenticationKey"

Pero ¿por qué sucede esto? La parte anterior en la que paso la cadena del archivo cuando lo leo línea por línea ya está pasando el valor correcto (lo verifiqué dos veces haciendo eco de la salida en un archivo de texto).

Editar Logré profundizar un poco más. Cuando intento repetir el valor del token en un archivo y agregar "al inicio y al final de la cadena, obtuve este resultado.

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

No estoy seguro de cómo eliminar esa nueva línea. ¿Alguien puede aconsejar?

Respuesta1

El problema parece ser causado por una nueva línea o un retorno de carro y una nueva línea en $authKey, según lo proporcionado por "FireEye AX"

Puede eliminar los retornos de carro y los avances de línea conectándolos a través detr -d '\r\n'

p.ej

# 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

No recuerdo si $BASH_REMATCH se pasará a un subshell... podrías intentarlo en una línea, tal vez funcione:

authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')

Respuesta2

Supongo que el archivo de datos que le han proporcionado tiene finales de línea estilo Windows (CR/LF) en lugar de finales de línea Unix/Linux (LF).

Esta coincidencia de patrón alternativo excluirá cualquier posible CR final:

[[ $line =~ ^SOME-PATTERN:[[:space:]](([^\015]*) ]]
authKey="${BASH_REMATCH[1]}"

información relacionada