我正在尝试通过 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 行收到以下错误(do 所在的行,FOR 语句之后的下一行)。
ksh[2]: syntax error at line 3 : `newline or ;' unexpected
FOR 循环有问题,但我不明白问题出在哪里。
有什么建议吗?
谢谢
最佳答案
在 ssh
从此处文档读取之前,命令替换已展开。如果该管道为空,远程 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
关于unix - 通过 ssh 执行 FOR 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325685/