当我键入scp命令时,可以制表符补全远程文件的神奇之处是什么?


16

大概这是我在oh-my-zsh设置中启用的某些插件提供的功能(我已经使用zsh多年了)。

自从我将公钥添加到服务器(现在我无需输入密码就可以SSH到服务器)以来,我就注意到了,当我scp在shell中编写命令时,我实际上可以制表完整的远程文件路径!

例如

$ diff <(scp Remoteuser@remote.domain.net:/var/www/html/

我点击选项卡,它就可以了!(至于我要使用命令本身来完成的工作,我将使用scp“复制”到stdout,并将其作为文件添加到差异文件中。这样,我可以看到我之前部署到服务器的确切更改正在运行rsync

我很好奇是什么使这项工作如此出色。它是与z shell集成的scp中内置的东西吗?或者是其他东西?

Answers:


16

噢,我找到了一个解释

引用相关部分:

zsh Shell具有(不止一项)重要功能,例如,远程制表符补全。例如,如果要通过scp复制文件,只需在远程主机上文件名的任何部分单击tab。zsh能够在后台建立ssh会话,并为您获取相关信息,因此您可以通过远程文件来制表。

帖子继续显示一些zstyle完成声明,但是我强烈建议您使用zsh包(例如上述oh-my-zsh)来由 OSS社区为您维护这些东西。

看起来很相关的东西,如在我的.oh-my-zsh目录中的系统上所看到的:

$ ack scp 
plugins/common-aliases/common-aliases.plugin.zsh
85:zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%
[# ]*}//,/ })'

<...>

惊人!!此功能是专有的吗zsh?有可能在bash
shivams

1
@shivams,可能与您的bash需求有关。似乎设置oh-my-zsh容易得多,而且zsh真的很棒。我认为,如果您真的很在意它,那么zsh可以做到bash无法做到的很多事情(反之亦然)。只是您愿意付出多少工作。
史蒂文·卢

7
@shivams对我而言,它始终只适用于bash -我只是一天在scp命令中本能地单击“ tab”,并且很惊讶地看到它自动完成!到处搜寻,好像您还需要安装bash-completion软件包。这个unix.se问题是相关的。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.