Unix 通过ssh执行FOR循环

Unix 通过ssh执行FOR循环,unix,ksh,solaris-10,Unix,Ksh,Solaris 10,我试图通过ssh在几个Solaris 10远程设备上执行此代码。我正在从本地文件ipa.txt读取一些连接信息: #!/bin/ksh while read hostn sid; do v_sid=$sid; ssh utest@$hostn << EOF for D in $(df -k |grep ora | grep -i $v_sid | awk '{print $6}') do printf "$(df -h $D |tail -

我试图通过ssh在几个Solaris 10远程设备上执行此代码。我正在从本地文件ipa.txt读取一些连接信息:

#!/bin/ksh

while read hostn sid; do

   v_sid=$sid;
   ssh utest@$hostn << EOF

   for D in $(df -k |grep ora | grep -i $v_sid | awk '{print $6}')
   do
       printf "$(df -h $D |tail -1|awk '{print "FS:", $6, " usage:", $5"%"}')\n"
   done

EOF

done < ipa.txt
FOR循环有问题,但我不知道它在哪里

有什么建议吗


谢谢你

你能试着把这个条件放进去吗


命令替换在
ssh
读取here文档之前展开。如果该管道为空,则远程shell将看到

for D in
do
这会导致你的错误。要将精确文本发送到远程shell,请转义可能触发本地扩展的任何美元符号,并使用
printf
的格式说明符

ssh utest@$hostn << EOF

   for D in \$(df -k |grep ora | grep -i \$v_sid | awk '{print \$6}')
   do
       printf '%s\n' "\$(df -h $D |tail -1|awk '{print "FS:", \$6, " usage:", \$5"%"}')"
   done

EOF

ssh utest@$hostn您在命令替换中缺少结束符
,您正在迭代其输出。@chepner抱歉,这是一个输入错误,但问题仍然存在:ksh[3]:第3行的语法错误:'hostn'意外
for D in
do
ssh utest@$hostn << EOF

   for D in \$(df -k |grep ora | grep -i \$v_sid | awk '{print \$6}')
   do
       printf '%s\n' "\$(df -h $D |tail -1|awk '{print "FS:", \$6, " usage:", \$5"%"}')"
   done

EOF