![scp 知道目标机器路径吗?](https://linux22.com/image/110486/scp%20%E7%9F%A5%E9%81%93%E7%9B%AE%E6%A0%87%E6%9C%BA%E5%99%A8%E8%B7%AF%E5%BE%84%E5%90%97%EF%BC%9F.png)
我最近从 OSX 切换到 Linux 以供个人使用。我有一台运行无头 Ubuntu 的家庭媒体服务器,现在有一台运行 Mint 的笔记本电脑。我的习惯是将东西移动到服务器上scp
。过去,在 OSX 上,当我键入复制目标时,我会煞费苦心地键入路径中的每个字符,因为如果出于习惯我尝试按 Tab 键完成,机器会变得暴躁,我必须重新开始。然而,我刚刚设置了新计算机的 ssh 密钥,并且正在将文件从笔记本电脑传输到服务器的过程中scp
,当我不小心按下 Tab 时,令我惊讶的是,它正确地完成了路径!这是正常行为吗?为什么它在 OSX 上的 term2 上不起作用?请注意,我确实在另一个终端窗口中打开了与服务器的连接。
答案1
这是 shell 的命令完成实际操作:它“知道”当当前命令行以 开头时scp
,在某些上下文中它需要连接到目标系统(如果可以)以完成那里的路径。这可以透明地完成,因为您已经加载了密钥。
您会看到这通常在/usr/share/bash-completion/completions/scp
(如果您使用的是 Bash)或/usr/share/zsh/functions/Completion/Unix/_ssh
(对于 Zsh)中实现。