O delimitador here-document, EOD
, que está finalizando o documento, deve estar em uma linha sozinho. A string EOD)
não é igual a EOD
.
mv
não remove arquivos em falhas. Assumindo que $B
não contém caracteres de espaço em branco e se a variável TXTDR
é indefinida pelo shell remoto, o comando executado seria
mv /$B.txt /tmp/$B
(com $B
expandido pelo shell local antes de ssh
ser chamado), mas isso definitivamente não excluirá /$B.txt
se o destino não for gravável.
Se $B
contiver caracteres de espaço em branco, ele precisará ser duplicado (assim como $TXTDR
deve ser):
mv "\$TXTDR/$B.txt" "/tmp/$B"
Para fazer a coisa específica para a qual você está usando este snippet de código, eu provavelmente teria escrito como
ssh "$user@$server" sh -s -- "$somepath/file.txt" <<'END_SCRIPT'
[ -e "$1" ] && mv "$1" "/new/location/${1##*/}"'
END_SCRIPT
ou mesmo apenas
ssh "$user@$server" sh -s -- "$somepath/file.txt" "/new/location/file.txt" <<'END_SCRIPT'
mv "$1" "$2"
END_SCRIPT
(que provavelmente não precisa de nenhum documento aqui e poderia ser encurtado para ssh "$user@$server" mv "..." "..."
)
... sem saída de texto desnecessário. Se você quiser testar o sucesso, veja $?
depois disso (seria zero se tudo corresse bem).
Isso também funcionaria:
if ! ssh "$user@$server" mv "..." "..."; then
echo 'Something went wrong with ssh or remote mv' >&2
fi