Você está esperando que todos os comandos após ssh "$server"
sejam executados dentro do ssh? Não é assim que funciona. ssh com um nome de host e nenhum outro argumento inicia uma sessão interativa. Depois que ele sair, o script continuará com o próximo comando ( exec < filelist.txt
). Isso não é um comando remoto dentro do ssh; o ssh é feito e desaparece quando o comando é alcançado. Isso é apenas uma execução sequencial normal do script que contém.
Sessões ssh interativas com stdin redirecionado são um tanto incomuns. É por isso que você recebe um aviso. (Para eliminar o aviso, você pode usar -t
ou -T
)
Se você deseja passar um script grande por uma conexão ssh e executá-lo remotamente, pode fazê-lo com um documento , assim:
ssh "$server" sh <<EOF
your big script here...
EOF
Certifique-se de considerar cuidadosamente quais variáveis devem ser expandidas pelo script local e quais devem ser expandidas durante a execução do script remoto. Um $
desprotegido no heredoc será expandido localmente. Para protegê-lo para que o shell remoto veja um $
, use \$
. Se você quiser que todos sejam protegidos, altere <<EOF
para <<'EOF'
.