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
这显然不存在。
我正在尝试通过 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
这显然不存在。