To jest stare pytanie i odpowiedź Jasona działa dobrze, ale chciałbym dodać to:
ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH
Można tego również używać z poleceniami su i poleceniami, które wymagają wkładu użytkownika. (zwróć uwagę na '
uciekającego heredoka)
Edycja: Ponieważ ta odpowiedź ciągle się powiększa, dodałbym jeszcze więcej informacji do tego wspaniałego zastosowania heredoc:
Możesz zagnieżdżać polecenia za pomocą tej składni, i to jedyny sposób, w jaki wydaje się działać zagnieżdżanie (w rozsądny sposób)
ssh user@host <<'ENDSSH'
#commands to run on remote host
ssh user@host2 <<'END2'
# Another bunch of commands on another host
wall <<'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
Możesz faktycznie rozmawiać z niektórymi usługami, takimi jak telnet, ftp itp. Pamiętaj jednak, że heredoc po prostu wysyła stdin jako tekst, nie czeka na odpowiedź między wierszami
Edycja: Właśnie dowiedziałem się, że możesz użyć wcięć wewnątrz kart, jeśli używasz <<-END
!
ssh user@host <<-'ENDSSH'
#commands to run on remote host
ssh user@host2 <<-'END2'
# Another bunch of commands on another host
wall <<-'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<-'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
(Myślę, że to powinno działać)
Zobacz także
http://tldp.org/LDP/abs/html/here-docs.html