在OSX上使用scp进行远程路径自动补全

4
在Linux上,您可以执行以下操作:
$ scp some-file.txt user@remote.host.com:/some/pa<tab>

如果您在主机上使用基于密钥的身份验证,iTerm2可以自动完成远程路径。但是,在OSX上似乎不起作用。有什么提示吗?

2个回答

3
这取决于您的shell。如果您正在使用bash,则需要正确的bash完成脚本。
请参见Bash completion项目,特别是此脚本:https://github.com/scop/bash-completion/blob/master/completions/ssh 这些脚本的默认位置是/etc/bash_completion,然后您可以通过在.bashrc.profile文件中添加类似于. /etc/bash_completion(注意.来源文件)来加载它们。
虽然重点是Linux,但它们也应该在Mac上工作。
Homebrew和其他软件管理器也提供bash-completion。如果已安装,请根据说明检查您的.bashrc/.profile以正确加载它。

太棒了!http://anonscm.debian.org/cgit/bash-completion/bash-completion.git/plain/README 帮我找到了解决方案。我在我的 .bash_profile 文件中添加了 if [ -f /usr/local/etc/bash_completion ]; then . /usr/local/etc/bash_completion fi 这段代码,现在一切都很完美。 - ingmar
@johannes - 看起来你这里的链接已经失效了。 - HaemEternal
1
@HaemEternal 我已经编辑了这个并将链接更改为 GitHub 项目。 - johannes

0
对于zsh而言,从大约2019年开始,它成为了默认的macOS shell。brew软件包zsh-completions包含了启用远程scp路径自动补全所需的功能(类似于默认的Ubuntu bash安装中可用的功能)。
如果您还没有安装homebrew,请按照这些说明进行安装。
要安装自动补全功能:
brew install zsh-completions

要启用自动完成功能,请按照brew输出的说明进行操作。通常,这将涉及添加到~/.zshrc(但brew的输出可能是最准确/最新的):
echo 'if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
    autoload -Uz compinit
    compinit
fi' >> ~/.zshrc

你需要调整一些权限:
chmod go-w '/opt/homebrew/share'
chmod -R go-w '/opt/homebrew/share/zsh'

现在远程scp的自动完成应该可以工作了。
这些说明已在苹果硅(M1)上的macOS Ventura上进行了测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接