在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
答案 0 :(得分:1)
尝试使用
file_"${X//:/_}".xml
以:
替换所有_
。
如果您的文件已经以这种方式命名,并且不应更改,
file_"${X//:/\\:}".xml
也可以使用。但我不确定scp
是否能够恰当地认识到这一点。
除此之外,scp
联机帮助页包含
文件名可能包含用户和主机规范以指明这一点 该文件将被复制到该主机或从该主机复制。本地文件名可以是 明确使用绝对或相对路径名来避免scp 处理包含':'的文件名作为主机说明符。副本之间 也允许使用两个远程主机。
所以只使用./file_"${X}".xml
也可以。