Aslında iki farklı sorun var. İlk olarak, burada bir belgenin içinde, değişken referanslar ve komut ikameleri, belgenin komuta gönderilmesinden önce kabuk tarafından değerlendirilir. Böylece, $(ls -l)
ve $outPut
yerel bilgisayardan, uzak bilgisayara (ssh
aracılığıyla) gönderilmeden önce değerlendirilir. Bunu önlemek için ya $
s (ve uzak tarafa gönderilmesini istediğiniz çıkışlar gibi diğer bazı karakterler) veya belgede bu özelliği devre dışı bırakan tırnak işaretini (ssh [email protected]$serverAddress << "EOF"
) kapatarak önleyebilirsiniz. .
İkincisi, uzak bilgisayarda gerçekleşen değişken atamaları uzak bilgisayarda kalıyor. Yerel ve uzak kabukların durumu paylaşmasının bir yolu yok. Uzak bilgisayardan bilgi istiyorsanız, komut dosyasının uzak kısmından çıktı olarak geri göndermeniz ve çıktıyı (remoteOutput=$(ssh ...)
veya ssh ... >"$tempFile"
gibi bir şeyle) kaydetmeniz gerekir. Birden çok değer gönderiyorsanız, komut dosyasının uzak kısmı, çıktısını yerel bölümün ayrıştırabileceği şekilde biçimlendirmek zorunda kalacaktır. Ayrıca, uzak parçadan (hata mesajları dahil) başka herhangi bir çıktının karıştırılacağının farkında olun, böylece istediğiniz değerleri almak için dikkatlice ayrıştırmanız gerekir.