Shell脚本if语句内ssh结合EOT报错,求修复方案
Shell脚本Here Document编译错误修复方案
核心错误及修复点:
- Shebang语法错误:第一行
#!bin bash应为#!/bin/bash,缺少根路径斜杠且bin与bash间不应有空格,这会导致脚本无法正确调用bash解释器。 - Here Document结束标记格式错误:
EOT结束标记必须顶格写,不能有任何前置空格(包括缩进)。原脚本中EOT前面有缩进空格,导致shell无法识别结束标记,引发执行错误。 - 目录操作逻辑错误:
chmod 644 /var:/var是系统目录,设置644权限会移除目录的执行权限(无法进入目录),建议改为针对具体文件或调整为chmod 755 /var(保持目录正常访问权限)。echo "image.id=$containerSha" > /var:不能直接将内容输出到目录,需指定具体文件路径,例如/var/image_config.conf。
- 变量展开问题:else块中
sshpass -p '$3'的单引号会阻止$3参数展开,应改为双引号sshpass -p "$3",确保脚本能正确获取第三个输入参数。
修复后的完整脚本:
#!/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 755 /var/folder1; echo "image.id=$containerSha" > /var/folder1/image_config.conf; 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
内容的提问来源于stack exchange,提问作者Snehal Gupta
相关产品推荐
相关产品推荐

