Tente colar isto:
ssh user@host 'read foo; echo ">>$foo<<"'
echo bar
Você verá >>echo bar<<
como saída do echo
no servidor.
Isso significa que ssh
irá alimentar os dados colados em sua entrada padrão, como se você tivesse feito
echo 'echo bar' | ssh user@host 'read foo; echo ">>$foo<<"'
A solução para isso, além de nunca colar comandos shell no terminal para executá-los, é usar ssh -n
, que redirecionará /dev/null
para ssh
:
ssh -n user@host 'echo foo'
echo bar
Infelizmente eu não sei a mecânica da colagem, então eu não posso dizer nada inteligente sobre por que os dados colados acabam no fluxo de entrada padrão de ssh
, mas eu sou supondo que tem a ver com o fluxo sendo herdado do shell interativo (que lê os comandos da entrada padrão).
Usar ssh -n
também é a solução (ou pelo menos a solução) para a questão
while read something; do
ssh user@host 'somecommand'
done <inputfile
Aqui, o loop só será executado uma vez, pois ssh
come os dados de inputfile
.