【问题标题】:Iterate over a list of IPv6 Addresse in a Bash Script for loop [duplicate]在循环的 Bash 脚本中迭代 IPv6 地址列表 [重复]
【发布时间】:2014-01-07 17:50:52
【问题描述】:

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

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

“ssh:无法解析主机名文件_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

【问题讨论】:

标签: linux bash ssh ipv6 scp


【解决方案1】:

尝试使用

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

为了用_替换所有:

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

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

也可以使用。但我不确定scp 是否正确识别了这一点。

除此之外,scp 联机帮助页包含

文件名可能包含用户和主机规范,以表明 该文件将被复制到该主机/从该主机复制。本地文件名可以是 明确使用绝对或相对路径名以避免 scp 将包含 ':' 的文件名视为主机说明符。之间的副本 也允许两个远程主机。

所以只使用./file_"${X}".xml 应该也可以。

【讨论】:

  • 替换为 _ 对我有用。第二种方法会更好,但它不起作用。我收到错误 ssh: 无法解析主机名文件_2001\\: Name or service not known
  • @OliverG。我刚刚在 scp 手册页中发现了一些可能有用的东西。
  • 感谢 ./file_"${X}".xml 的帮助!
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 2017-04-30
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多