【问题标题】:unexpected EOF while looking for matching `"'寻找匹配的“”时出现意外的EOF
【发布时间】:2014-04-24 14:44:11
【问题描述】:

当我从命令行执行时,该命令工作正常。但是,当我从 shell 脚本执行它时会引发错误

rsync -avz -e ssh --exclude-from=rsync.file --rsync-path="sudo rsync" ostnfe/ ubuntu@mask.compute-1.amazonaws.com:/var/www/ostnfe

来自 shell 脚本的代码:

CMD='rsync -avz -e ssh --exclude-from=rsync.file --rsync-path="sudo rsync"  '$1'/ ubuntu@'$AMZ':/var/www/'$2
$CMD

错误:

bash: -c: line 0: unexpected EOF while looking for matching `"'
bash: -c: line 1: syntax error: unexpected end of file

【问题讨论】:

    标签: linux shell command-line


    【解决方案1】:

    您可以只使用 shell 函数:

    cmd () {
        rsync -avz -e ssh --exclude-from=rsync.file --rsync-path="sudo rsync"  $1/ ubuntu@$AMZ:/var/www/$2
    }
    
    # calling with args
    cmd "$1" "$2"
    
    # alternatively, calling through variable without args
    VAR='eval cmd "$1" "$2"'
    $VAR
    

    以这种方式逃跑更省事。

    更新:编辑 cmd() 以表示有效的解决方案。

    【讨论】:

    • 谢谢。经过几次修改后,这才奏效。我基本上只在'sudo rsync'周围有双引号。必须删除所有其他双引号才能使其正常工作。
    • @Srik 你最好不要在你的路径中有空格。我怀疑是否有必要删除参数周围的引号,这会导致某些参数出现问题。
    【解决方案2】:

    将完整的命令行存储在字符串中是个坏主意。改用 BASH 数组:

    CMD=(rsync -avz -e ssh --exclude-from=rsync.file "--rsync-path='sudo rsync'" "$1/ ubuntu@$AMZ:/var/www/$2")
    "${CMD[@]}"
    

    【讨论】:

      【解决方案3】:

      请尝试以下操作:

      CMD=$(echo "rsync -avz -e ssh --exclude-from=rsync.file --rsync-path=\"sudo rsync\"  $1/ubuntu@${AMZ}:/var/www/$2")
      
      $CMD
      

      检查是否有任何缺失或多余的空间。

      【讨论】:

        猜你喜欢
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多