我倾向于用“口音坟墓”字符 (不移动代字号,后退号或简单的旧口音,whathaveyou ..)作为前缀使用的文件和文件夹 ,因为它很容易获得,让我来按字母顺序sorting,同时让我select在顶部显示一些项目。 除非我通过CLI或SSH / SCP访问这些文件,否则它工作得很好。
如果我试图运行一个命令,调用该文件未转义↝它踢我进入一个交互式会话..例如↯
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/ ↩ >
但是,如果我尝试逻辑解决scheme↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/ ↩ bash: -c: line 0: unexpected EOF while looking for matching ``' bash: -c: line 1: syntax error: unexpected end of file
我知道“新”规则是使用一个语法,如export NOW=$(date) vs export NOW= ` export NOW=$(date) `(事实上,我有一个时间,即使在SE MD语法写后者…)但这与ENV或任何脚本无关…
注意:这是一个Mac OS X环境,但是说,GUI在日常工作中从来没有遇到过处理这个angular色的问题,通常,如果在terminal中会出现语法问题,Apple在禁用GUI中的行为方面做得相当不错…不知道这是一个错误,还是处理这种path的技术简直是模糊不清……但迄今为止, 我一直无法find方式“逃避它” ?
您可以使用Jed Daniels提到的3个反斜杠,也可以用单引号(')包装它,并使用单个反斜杠。
两者的例子如下。
$ touch dir/'`rik' $ ls -l dir total 1865376 -rw-r--r-- 1 rik staff 0 Jul 1 09:51 `rik $ scp localhost:dir/\\\`rik ./ `rik 100% 0 0.0KB/s 00:00 $ scp localhost:dir/'\`rik' ./ `rik 100% 0 0.0KB/s 00:00 $
三个反斜杠应该这样做:
jed@jed-osx:~$ ls -la \`foo ls: `foo: No such file or directory jed@jed-osx:~$ scp desk:\\\`foo . `foo 100% 0 0.0KB/s 00:00 jed@jed-osx:~$ ls -la \`foo -rw-r--r-- 1 jed staff 0 Jul 1 09:45 `foo jed@jed-osx:~$ rm \`foo
第一个反斜杠转义反斜杠,所以它被发送到另一端,但另一端抛出错误,因为它期望反引号成对。 第二个反斜杠转义第一个反斜杠,那么你需要额外的两个反斜杠,所以你可以发送一个转义的反斜杠到另一边。
编辑:正如Rik提到的,你也可以做一个单引号。 我没有想到这一点,因为你不能用variables来处理它们(在单引号中它们不会在本地系统上扩展)。
通常情况下,命令行会被shell解释一次。 但是,由于历史原因,scp也将文件名传递给远程shell,所以文件名被shell解释两次 。 这也是什么使得像scp remote:'/path/prefix*' /path/local/工作,远程shell正在扩大/path/prefix* 。
避免第二次扩展的最简单的方法是使用sftp,它不使用远程shell。 它仍然执行glob扩展,但是因为你可以在stdin上给它命令,所以你完全可以避免你的本地shell扩展。
除此之外,您可以使用任何正常的shell引用机制,包括由@Jed Daniels和@Rik Schneider提供的引用机制,但我想解释实际发生的情况并提及sftp。
(您可以在scp文件中使用各种shellfunction,例如scp server:\$HOME/file dest将使用远程 shell的$HOME的思想,而如果您拿出\ ,它会使用您的本地 shell )。