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 -ne次のようにに変更するとcommand 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ただし、パッケージが更新されると、これらの変更は失われます。

関連情報