我试图用一个文件复制scp
在bash
用冒号( :
)在源文件名字符。 我命令我使用的模糊版本是:
scp file\:\ name.mp4 user@host:"/path/to/dest"
我得到这个错误:
ssh: Could not resolve hostname Portal 2: Name or service not known
我知道我可以只重命名该文件并删除:
,但我想知道是否有可能逃脱结肠。
我试图用一个文件复制scp
在bash
用冒号( :
)在源文件名字符。 我命令我使用的模糊版本是:
scp file\:\ name.mp4 user@host:"/path/to/dest"
我得到这个错误:
ssh: Could not resolve hostname Portal 2: Name or service not known
我知道我可以只重命名该文件并删除:
,但我想知道是否有可能逃脱结肠。
并不完全是bash
逃避问题,这是scp
治疗x:
作为[用户@]主机前缀,请尝试:
scp ./file:\ name.mp4 user@host:"/path/to/dest"
使用相对(例如./
)或完全合格的路径( /path/to/source
)防止了这种行为-的存在/
一个前:
导致的OpenSSH停止检查一个可能的host:
或user@host:
前缀)。
的OpenSSH的scp
只有特殊情况下以冒号允许那些没有问题的工作开始的文件名,它为逃避一个不支持:
通常意义上的,并具有有效的主机名与几乎任何文件名没有其他的想法:
可能导致此(或者,如果等效的IPv6行为[
]
被发现之前:
)。
这也可能会影响其他程序,如rsync
,相同的解决方法适用于那里。
(由于OpenSSH的公司的简单解析[]
括IPv6地址,就可以顺利scp
包含文件:
与启动[
,或含有@[
前:
不包含]:
,但这不是普遍有用的;-)
(当下面的文字写 原来的问题是如何逃脱在bash冒号?它适用于这种情况,而不是scp
,因为没有量外壳逃逸,将有助于在那里。)
为了回答关于如何逃脱的问题:
你并不需要,但“ \:
”作品。 邻居一个:
用于:
:
,没必要逃避,虽然可以,就像\e\c\h\o foo
它的命令没有影响(“没有效果”并不完全正确,如果你逃避的一个或多个字符,它将防止别名被匹配,你可以别名:
) PATH
(和其他人, CDPATH
, MAILPATH
)转义值没有任何有用的效果(我一直无法从目录中我路上运行的程序包含:
,这是一个小意外) ${name:-x}
多, name
必须是[a-zA-Z_][a-zA-Z0-9_]
所以没必要逃跑变量名称,因为没有歧义,没有必要逃跑随后:
在参数扩展的其它变型 ? :
? :
三元只在变量和数字操作,无需逃生 ==
和=~
在喜欢的模式类[[:digit:]]
,你可以逃脱\:
但我在一个头绪,可能永远是有用的? \:
有没有有用的效果 (需要注意的是空的命令就是:
你可以有一个命令或功能命名,如“ :foo
”,它可以在没有逃脱被调用,在这方面它是不同的,以#
,其中指定命令#foo
需要进行转义。 )
我尝试使用完全合格的路径,@ mr.spuratic的答案,但没有工作,在我的情况,我必须使用绝对路径,这是我的解决方案:
scp `hostname`:/root/this/is/test/file.txt user@host:"/path/to/dest"