O documento here não tem aspas, isso significa que a expansão de variáveis e a substituição de comandos são feitas quando o documento é formado, localmente. Neste caso, não terá o efeito desejado, pois acabaria como algo como
queue=somevalue
echo "Queue name : "
Ou seja, ele se expandirá para um script que define o valor da variável queue
, mas como a variável também é expandida dentro da sequência impressa por echo
, seu valor correto (no momento da execução) será nunca será exibido.
Note que esta expansão é feita mesmo antes de ssh
ser chamado.
Se a chamada curl
precisar acontecer no host remoto (realmente não haveria um motivo para enviar um script here-document de outra forma, ou fazer a chamada ssh
de todo), cite o documento aqui. Você faz isso usando <<'EOF'
.
No entanto, isso também significa que a função getqueue
precisa ser definida no ambiente do script remoto. Você precisa incluir essa função no documento here ou selecionar os bits necessários.
Como a função é basicamente apenas
curl urlcall | jq -r '.queueName'
você poderia fazer
ssh -T -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "$HOME_DIR/<pemfile>" "$username@$IP" <<'REMOTE_SCRIPT'
queue=$(curl urlcall | jq -r '.queueName')
printf 'The queue name is "%s"\n' "$queue"
REMOTE_SCRIPT
Se algumas expansões precisarem estar acontecendo localmente e outras remotamente, então não cite o documento here, mas escape do $
que deve ser expandido remotamente. Por exemplo,
ssh user@server <<SCRIPT
remote_var=\$( something )
printf 'remote_var = "%s", local_var = "%s"\n' "\$remote_var" "$local_var"
SCRIPT
No exemplo acima, remote_var
está sendo definido remotamente. Não podemos atribuir um valor a local_var
no documento here (e esperar poder usar $local_var
com esse valor, pelas mesmas razões acima), mas a chamada printf
imprimirá o valor que a variável tinha no momento em que o documento here foi expandido (logo antes da chamada para ssh
).