elvish_config/aliases/cleankh.elv

37 lines
878 B
Plaintext

edit:add-var cleankh~ {|@argv|
use str
use moi/util/condition
use moi/util/list
use moi/util/ip
fn less {|cmp e1 e2| < ($cmp $e1 $e2) 0 }
fn sort-host {|e1 e2|
var i1 = (condition:cset (ip:is-ip $e1) 1 0)
var i2 = (condition:cset (ip:is-ip $e2) 1 0)
if (!= $i1 $i2) {
< $i1 $i2
} elif (== $i1 0) {
<s $e1 $e2
} else {
less $ip:cmp~ $e1 $e2
}
}
var khosts = [&]
cat ~/.ssh/known_hosts | eawk {|_ hosts @rest|
var key = (str:join ' ' $rest)
if (not (has-key $khosts $key)) {
set khosts[$key] = [&]
}
str:split , $hosts | each {|h|
set khosts[$key][$h] = $nil
}
}
var lines = [(keys $khosts | each {|key|
var hosts = (keys $khosts[$key] | order &less-than=$sort-host~ | str:join ,)
put $hosts $key | str:join ' '
})]
echo (str:join "\n" $lines) > ~/.ssh/known_hosts
}