root で zsh
root で zsh 使うと command completion がなぜか失敗して portupgrade で package 名を補完できないので、自分で /var/db/pkg を参照して補完リストに突っ込むようにしてみた。(どうも出来るマシンと出来ないマシンがある?)
/root/.zshrc にこんな行を書き、
compdef -d portupgrade pkg_list=(`perl /root/listpkg.pl`) compctl -k pkg_list portupgrade
/root/listpkg.pl を書く。
#!/usr/local/bin/perl use File::Glob; my @list = File::Glob::bsd_glob('/var/db/pkg/*'); for my $pkg (@list) { next if $pkg =~ /pkgdb\.db/o; my $pkg_name = ( split m!/!, $pkg )[-1]; my @splits = split /\-/, $pkg_name; pop @splits; printf "%s\n", join( '-', @splits ); }
うーん、出来るようにはなったけど、これはなんとなく危険かつダサいなあ。そもそも root で zsh なんか使おうとするのが間違ってるのか。