我在工作中使用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
函数处理原始功能?
答案 0 :(得分:0)
首先,如果您经常访问megacorpnetworkdomain.com下的主机,则应将其放在/etc/resolv.conf中;应该有一条线:
search megacorpnetworkdomain.com
然后您可以通过引用短主机名来使用所有主机,即在任何程序中使用dev1。
对于ssh,您可以遵循Etan Reiser的建议,示例如下:
Host dev1
HostName dev1.megacorpnetworkdomain.com
User user
当您使用ssh或scp时,他们会像往常一样为您提供在标签完成时定义的选项。