【发布时间】:2015-03-19 05:50:40
【问题描述】:
我在工作中使用 ssh,最近在我的本地工作机器上切换到 Linux。结果,我现在必须完全限定主机名(即,我需要使用 dev1.megacorpnetworkdomain.com 而不是 dev1)。这对 scp 来说相当烦人。我已经为远程路径设置了自动完成功能。我试图做的是为路径创建一个变量别名:
WORK='user@dev1.megacorpnetworkdomain.com:/home/user'
现在的问题是当我执行以下操作时 scp 无法执行远程完成:
scp $WORK/<tab>
而以下正确执行远程完成:
scp user@dev1.megacorpnetworkdomain.com:/home/user/<tab>
我试图通过使用complete 天真地解决这个问题:
_scp_expand_vars () {
COMPREPLY=()
local cur=${COMP_WORDS[COMP_CWORD]}
eval cur=$cur
COMPREPLY=( $cur )
return 0
}
complete -F _scp_expand_vars scp
这现在可以正确扩展 scp 的变量,但会破坏远程目录扩展的原始功能。我怎样才能实现两者?根据一些在线研究,我假设原始功能由 _scp_remote_files 函数处理?
【问题讨论】:
-
您可以根据需要在
.ssh/config文件中为scp设置主机别名。默认情况下,scp是否不包含您在 known_hosts 文件中的完整主机? -
确实如此,但是,感兴趣的主机似乎不在 ~/.ssh/known_hosts 中,并且永远不会触发将 ssh 添加到那里的提示。我只是手动添加它并开始自动完成,我想这让我 90% 在那里。此外,由于某种原因,在 .ssh/config 中创建别名会导致远程完成显着变慢。
标签: bash variables bash-completion