zshのホスト名補完に、sshのknown_hostsを活用する設定。.zshrcに以下を追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
make_p () { local t s t="$1"; shift [ -f $t ] || return 0 for s; do [ $s -nt $t ] && return 0 done return 1 } cache_hosts_file="$ZDOTDIR/.cache_hosts" known_hosts_file="$HOME/.ssh/known_hosts" print_cache_hosts () { if [ -f $known_hosts_file ]; then awk '{ if (split($1, a, ",") > 1) for (i in a) { if (a[i] ~ /^[a-z]/) print a[i] } else print $1 }' $known_hosts_file fi } update_cache_hosts () { print_cache_hosts | sort -u > $cache_hosts_file } make_p $cache_hosts_file $known_hosts_file && update_cache_hosts _cache_hosts=( $(< $cache_hosts_file) ) |
ずっとこの便利さを当たり前だと思っていて、IRCで指摘されるまで自分が書いた上のコードのおかげであることを忘れていた。せっかくなのでここで紹介しておく。
[後日、若干の改善のため微修正しました。(2004-04-25)]