在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
也应该有效。