ssh 从 Linux 到 Windows - 为什么路径中需要这么多斜杠?

ssh from Linux to Windows - why need so many slashes in path?

我正在尝试通过 ssh 从 Linux 机器向 Windows 机器发送 运行 命令。

Windows 机器安装了 OpenSSHx64

以下带双引号的命令失败:

ssh user@win8-pc "ls -l \\172.21.15.120\vol0slash"

ls: cannot access 172.21.15.120vol0slash: No such file or directory

带单引号的相同命令仍然失败,但至少显示单斜线:

ssh user@win8-pc 'ls -l \\172.21.15.120\vol0slash'
ls: cannot access 2.21.15.120vol0slash: No such file or directory

用单引号包围的路径几乎可以工作,但仍然缺少一个根斜线:

ssh user@win8-pc "ls -l '\\172.21.15.120\vol0slash'"
ls: cannot access 2.21.15.120\vol0slash: No such file or directory

现在终于将第五个斜杠添加到 UNC 路径根,成功了:

ssh user@win8-pc "ls -l '\\2.21.15.120\vol0slash'"
total 536
drwxr-xr-x 1 Admin Domain Users   0 Jan 23 08:33 GeneralSystemDiagnostic
drwxr-xr-x 1 Admin Domain Users   0 Jan 22 08:10 cifs
-rw-r--r-- 1 Admin Domain Users 336 Jan 23 12:00 linux.txt
drwxr-xr-x 1 Admin Domain Users   0 Jan 19 14:11 nfs

谁能解释一下这种行为背后的逻辑?

反斜杠在bash中是特殊符号,在所有Linuxshell中也很常见,因此如果你需要使用它,它必须使用另一个[=19来转义=](反斜杠)。命令为passed through the remote bash

bash -c "ls -l '\\2.21.15.120\vol0slash'"

哪个传输评估特殊字符并使其看起来像

ls -l '\2.21.15.120\vol0slash'

当它应该 运行.

使用奇数个反斜杠的问题最终会被评估为一个特殊字符,所以如果你想在最后看到一个反斜杠,你应该使用偶数。

另一件事是 ls 在 Windows 上如何解释参数(我不知道)。使用简单的 echo:

查看测试
$ ssh f25 "echo ''"

$ ssh f25 "echo '\1'"

$ ssh f25 "echo '\'"
\1
$ ssh f25 "echo '\\1'"
\1

同样可以不用'解释原命令:

ssh user@win8-pc "ls -l \\172.21.15.120\vol0slash"

已经在本地 shell(因为它不在 '

ssh user@win8-pc "ls -l \172.21.15.120\vol0slash"

并且远程 shell 已经

bash -c "ls -l \172.21.15.120\vol0slash"

计算结果为

bash -c "ls -l 2.21.15.120vol0slash"

然后到

ls -l 172.21.15.120vol0slash

这显然不存在。