Como o documento here é indicado por <<EOF
(sem nenhuma aspas), o conteúdo do documento here está sujeito à expansão de \$'
. Por isso, $newUrl
no documento here expande para o seu valor no shell local.
Para passar $newUrl
ao shell remoto e fazer com que ele expanda a variável, você pode proteger a $
da expansão: \$newUrl
em vez de $newUrl
ou usar um literal aqui-document: <<'EOF'
em vez de '' <
Você está expandindo a variável newUrl
em uma string que será interpretada por um shell. Isso significa que o valor da variável será interpretado como um fragmento de script de shell, não como uma string. Se o valor contiver caracteres especiais de shell, haverá estragos. (Quais caracteres são problemáticos depende da solução que funciona na caixa nominal usada).
Em vez de usar muitas camadas de cotação e expansão, passe a URL como entrada para o comando executado como raiz. Então você não tem nada para se preocupar. Isso tem a vantagem adicional de funcionar mesmo se o sudo não estiver configurado para aceitar -E
, o que é bastante comum. Você pode usar sudo sh -c 'cat >>/path/to/file'
, ou melhor, para evitar possíveis problemas de cotação no arquivo, sudo tee -a /path/to/file
.
sshpass -p "password" ssh -t -t my-box <<'EOF'
newUrl="this is a url"
printf '%s\n' "$newUrl" | sudo tee -a /path/to/file
EOF