用于scp选项卡完成的bash变量扩展

时间:2015-01-20 20:49:15

标签: bash variables bash-completion

我在工作中使用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函数处理原始功能?

1 个答案:

答案 0 :(得分:0)

首先,如果您经常访问megacorpnetworkdomain.com下的主机,则应将其放在/etc/resolv.conf中;应该有一条线:

search megacorpnetworkdomain.com

然后您可以通过引用短主机名来使用所有主机,即在任何程序中使用dev1。

对于ssh,您可以遵循Etan Reiser的建议,示例如下:

Host dev1
    HostName dev1.megacorpnetworkdomain.com
    User user

当您使用ssh或scp时,他们会像往常一样为您提供在标签完成时定义的选项。