Nat*_*nes 35 bash scp escaping
我正在尝试使用scpin 在源文件名中bash使用冒号(:)字符复制文件.我正在使用的命令的混淆版本是:
scp file\:\ name.mp4 user@host:"/path/to/dest"
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ssh: Could not resolve hostname Portal 2: Name or service not known
Run Code Online (Sandbox Code Playgroud)
我知道我可以重命名文件并删除它:,但我想知道是否可以逃脱冒号.
mr.*_*tic 68
并不完全是bash逃避问题,它的scp治疗x:作为[用户@]主机前缀,请尝试:
scp ./file:\ name.mp4 user@host:"/path/to/dest"
Run Code Online (Sandbox Code Playgroud)
使用相对(例如./)或完全限定的路径(/path/to/source)可防止此行为 - /在a之前存在:导致OpenSSH停止检查可能的host:或user@host:前缀).
OpenSSH scp唯一的特殊情况文件名,以冒号开头,允许那些没有问题的工作,它不支持:在正常意义上转义a ,并且没有其他有效主机名的概念,所以几乎任何带有a的文件名:都可能导致这个(或等效的)如果[ ]在之前找到IPv6行为:).
这也会影响其他程序,例如rsync,同样的解决方法适用于那里.
(由于OpenSSH的公司的简单解析[]封闭的IPv6地址,就可以顺利scp的文件包含:与启动[,或者包含@[以前:,不含有]:,但是这不是一般有用;-)
(下面的文字是在最初的问题是如何在bash中逃避冒号的时候写的?它适用于那种情况,但不适用于scp没有任何数量的shell 转移会对那里有帮助.)
要回答关于如何逃避的问题:,你不需要,但" \:"有效.使用的地方::
:,不需要转义,虽然你可以,就像\e\c\h\o foo它对命令没有影响一样("没有效果"并不完全正确,如果你转义一个或多个字符,它将阻止别名匹配,你可以别名:)PATH(和其他人,CDPATH,MAILPATH)转义值已经没有有用的效果(我已经无法在我的路径从目录中包含一个运行的程序:,这是一个小意外)${name:-x}多,name必须是[a-zA-Z_][a-zA-Z0-9_],所以不需要转义变量名,并且由于没有歧义,不需要:在参数扩展的其他变体中后续转义? : trinary只对变量和数字起作用,不需要逃避==和=~模式中的类一样[[:digit:]],你可以逃避,\:但我不知道这可能有用......\:没有任何有用的效果(注意,null命令只是:,您可以使用一个名为" :foo" 的命令或函数,并且可以在不转义的情况下调用它,在这方面它与#命名的命令#foo需要转义的位置不同.)
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           13848 次  |  
        
|   最近记录:  |