You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:15:38