无法在if中使用ssh命令结束传输(EOT),它会产生编译错误。我试过使用〈〈-EOT和〈〈〈EOT,但没有任何效果。有人能提出解决这个问题的建议吗?
# !bin bash
if [ -z "$2" ];
then
rsync -a abc.tgz root@$1:/var/folder1
echo "Done upload"
# Change permissions of agent image and create image configuration
ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no root@$1<<EOT
chmod 644 /var;
echo "image.id=$containerSha" > /var;
EOT
else
rsync -a abc.tgz root@$1:/var
echo "Upload done"
ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no root@$1<<EOT
cd /var;
sshpass -p '$3' rsync -a abc.tgz root@$2:/var;
sshpass -p '$3' ssh root@$2 'chmod 777 /var/*; ls -ltr';
EOT
fi
exit
3条答案
按热度按时间cbwuti441#
通过Shellcheck运行脚本会发现以下错误(沿着形状不正确的shebang行):
EOT
标记 * 不能 * 缩进。ftf50wuq2#
我刚刚遇到这个问题,删除缩进将解决这个问题:
而不是:
您可以尝试:
p3rjfoxz3#
如果我没有弄错的话,EOT是数值为4的字符。
您可以稍后使用
${eot}
表示传输结束。UPDATE:我的答案是关于在bash程序中表示传输结束字符的问题。正如AKX在他的评论中合理地指出的那样,真实的的问题与传输结束无关,而是如何标记here-document的结束。