2011-07-14 15 views
5

this question'da yanıtın, ifadeleri noktalı virgüllerle ayırmak olduğu anlaşılıyor. Ancak, eğer ifadeler ve karmaşık alıntılanmış dizeler varsa, çoklu komutlarla karmaşık betiğe girersek bu hantal hale gelebilir. Düşünürdüm.SSH kullanarak uzak bir makinede birden çok komut yayınlamanın alternatif yolları?

Başka bir alternatifin sadece birbiri ardına birden fazla SSH komutu yayınlamak olduğunu düşünürüm, fakat bu yine hantal olurdu, artı kamuya açık/özel anahtar kimlik doğrulaması için ayarlanmadım, bu yüzden bu şifrelerin bir demet olmasını isterdi zamanların Ben ideal istiyorum ne

interaktif kabuk deneyimi çok benzer: komut bir noktada @ the_remote_server içindeki ssha ve bu noktadan sonra o zaman (etkileşimli) yazın şifre ister ve komut dosyanız "çıkış" komutunu yayınlayana kadar, komut dosyasındaki tüm komutlar uzak makinede yorumlanır.

Tabii bu işe yaramazsa: Başka bir alternatif

ssh [email protected] 
    cd some/dir/on/remote/machine 
    tar -xzf my_tarball.tgz 
    cd some/other/dir/on/remote 
    cp -R some_directory somewhere_else 
exit 

var mı? Sanırım bu kısmı senaryodan çıkartabilirim ve uzaktaki ana bilgisayardaki bir betiğe yapıştırabilirim. Meh. Şimdi iki senaryoyu koruyorum. Ayrıca, varsayılanları ve diğer şeyleri tutmak için küçük bir yapılandırma dosyası istiyorum ve bunu iki yerde de sürdürmek istemiyorum.

Başka bir çözüm var mı?

cevap

9

Heredoc'u kullanın.

ssh [email protected] << EOF 
cd some/dir/on/remote/machine 
tar -xzf my_tarball.tgz 
cd some/other/dir/on/remote 
cp -R some_directory somewhere_else 
EOF 
+0

benzeri yer alır. Teşekkürler! Heredoc betiğinizin daha karmaşık hale geldiği (özellikle değişkenler ile) –

+0

, heredoc sınırlayıcıyı alıntılamak isteyeceksiniz: '<< 'EOF'. Sonra, heredoc tam anlamıyla uzak makineye gönderilecek ve yerel kabuğunuz bunu yorumlamaya çalışmayacaktır. Boru fikri için –

İlgili konular