ssh bash 补全:sed:-e 表达式 #1,字符 97:“s”命令的 RHS 上的引用 \2 无效

ssh bash 补全:sed:-e 表达式 #1,字符 97:“s”命令的 RHS 上的引用 \2 无效

我正在使用 Ubuntu 14.04.5 LTS。

文件的任何主机上的 ssh bash 补全都~/.ssh/config不起作用:

$ ssh b2sed: -e expression #1, char 97: invalid reference \2 on `s' command's RHS

用于 ssh 完成的软件包已安装:

$ dpkg -S /usr/share/bash-completion/completions/ssh
bash-completion: /usr/share/bash-completion/completions/ssh

答案1

我发现在我的系统上,sed别名是sed -E

因此,我没有删除实际上经常使用的这个别名,而是决定更新脚本_known_hosts_real中的函数/usr/share/bash-completion/bash_completion(我认为这并不是真正推荐的):

$ type _known_hosts_real | grep -w sed
        local hosts=$( sed -ne 's/^[ \t]*[Hh][Oo][Ss][Tt]\([Nn][Aa][Mm][Ee]\)\{0,1\}['"$'\t '"']\{1,\}\([^#*?]*\)\(#.*\)\{0,1\}$/\2/p' "${config[@]}" );

通过替换sed -necommand sed -ne,这样:

# append any available aliases from config files
if [[ ${#config[@]} -gt 0 && -n "$aliases" ]]; then
    local hosts=$( command sed -ne 's/^[ \t]*[Hh][Oo][Ss][Tt]\([Nn][Aa][Mm][Ee]\)\{0,1\}['"$'\t '"']\{1,\}\([^#*?]*\)\(#.*\)\{0,1\}$/\2/p' "${config[@]}" )
    COMPREPLY+=( $( compgen -P "$prefix$user" \
        -S "$suffix" -W "$hosts" -- "$cur" ) )
fi

bash-completion但是,当软件包更新时,这些更改将会丢失。

相关内容