我试图通过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 循环直接执行到终端,它就可以工作。但是,如果我将整个脚本放入.ksh文件并执行该脚本,则会在第3行(执行,FOR语句后的下一行)中收到以下错误。
ksh[2]: syntax error at line 3 : `newline or ;' unexpected
FOR 循环存在问题,但我不明白它在哪里。
有什么建议吗?
谢谢
答案 0 :(得分:2)
在 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
答案 1 :(得分:0)
你可以尝试将条件纳入double-brackets吗?
while [[ read hostn sid ]]; do