循环访问 Bash 脚本循环中的 IPv6 地址列表



在Bash脚本中,我迭代了IPv6地址列表。我尝试在每个唯一的IPv6设备上scp一个唯一的文件。每个设备的唯一文件在文件名中都有 IPv6 地址。

不幸的是,SSH/SCP尝试解决文件名中的某些内容并抛出此错误:

"ssh:无法解析主机名file_2001:名称或服务未知"

我怎样才能抑制这种意想不到的解决? 还是有可能逃脱这里的东西?

#!/bin/bash
DEVICES="
2001:db8::3e81:d8ff:feef:4982 
"
do_copy_xml_file()
{
    if [ -e $XML_FILE ]; then
        for X in ${DEVICES} ; do
            echo "copy file_${X}.xml to ${X}:/data/file.sxml"
            sshpass scp -o stricthostkeychecking=yes file_"${X}".xml root@[${X}]:/file.xml
        done
    else
        echo $XML_FILE does not exist
    fi
}
do_copy_xml_file

尝试使用

file_"${X//:/_}".xml

为了将所有:替换为_.

如果您的文件已经以这种方式命名并且不应更改,

file_"${X//:/\:}".xml

也可以使用。但我不确定scp是否适当地认识到了这一点。

除此之外,scp手册页包含

文件名可能包含用户和主机规范,以指示 该文件将复制到该主机/从该主机复制。本地文件名可以是 使用绝对或相对路径名显式表示以避免SCP 将包含":"的文件名视为主机说明符。之间的副本 还允许使用两台远程主机。

因此,仅使用./file_"${X}".xml也应该有效。

最新更新