Estamos tendo um quebra-cabeça muito estranho relacionado à codificação de caracteres e substituição do bash, onde estamos passando uma variável bash para um script rake que é canalizado para uma variável bash diferente, e não tenho certeza do que tentar a seguir. Ele só funciona quando você cria a variável de maneira sem substituição, mas não apenas as variáveis correspondem de qualquer maneira que você as criou, mas até mesmo suas representações binárias correspondem. Essedeveexclua qualquer coisa relacionada a codificações incorretas, terminadores nulos ou caracteres não exibíveis. Este é um dos bugs mais interessantes que já vi trabalhando com qualquer linguagem, então queria compartilhar com a comunidade e ver se alguém tem alguma ideia do que poderia estar acontecendo aqui. Para mais contexto:
RELEASE_CODE=1250
MATCHING=replace
NAME=redactedDeployment-replace-d
Primeiro, o caso de trabalho em que o script passa com o resultado esperado.
# FULLNAME=redactedDeployment-1250-d
# deployments=$(rake find_deployments[$FULLNAME])
# echo $deployments
redactedDeployment-1250-d
# echo $FULLNAME
redactedDeployment-1250-d
# echo $FULLNAME | perl -lpe '$_=join " ", unpack"(B8)*"'
01110010 01100101 01100100 01100001 01100011 01110100 01100101 01100100 01000100 01100101 01110000 01101100 01101111 01111001 01101101 01100101 01101110 01110100 00101101 00110001 00110010 00110101 00110000 00101101 01100100
e
# if [ "${MATCHING,,}" = "replace" ]; then
> FULLNAME=${NAME/replace/$RELEASE_CODE}
> tr -dc '[[:print:]]' <<< "$FULLNAME" #Remove non-printable characters, same result if we remove this line
> else
> FULLNAME=${NAME}-${RELEASE_CODE}
> fi
# deployments=$(rake find_deployments[$FULLNAME])
rake aborted!
Don't know how to build task 'find_deployments[redactedDeployment-1250-d' (See the list of available tasks with `rake --tasks`)
(See full trace by running task with --trace)
# echo $FULLNAME
redactedDeployment-1250-d
# echo $FULLNAME | perl -lpe '$_=join " ", unpack"(B8)*"'
01110010 01100101 01100100 01100001 01100011 01110100 01100101 01100100 01000100 01100101 01110000 01101100 01101111 01111001 01101101 01100101 01101110 01110100 00101101 00110001 00110010 00110101 00110000 00101101 01100100