■
dockerのalias を以下のように設定している。
alias dr='docker run -it --rm' alias di='docker images' alias dp='docker ps -a'
このままだとbash-completionが効かないので自分で定義する。 ":"があると、うまくいかなかったが、下記のようにして、思った通りにできた。
.bashrcの内容。
comp_images() { _get_comp_words_by_ref -n : cur prev words case "$prev" in -p) COMPREPLY=(80:8888);; *) COMPREPLY=(`python ~/bin/docker_completion.py $words $cur $prev`) esac } complete -F comp_images dr
~/bin/docker_completion.pyの内容。
import sys from subprocess import run, PIPE com, cur, prev = (sys.argv[1:] + ['']*3)[:3] o = run(['docker', 'images'], stdout=PIPE, universal_newlines=True).stdout f = lambda i, t: '%s:%s'%(i,t) if t != 'latest' else i ss = [f(*s.split()[:2]) for s in o.rstrip().split('\n')[1:]] g = lambda t: t[t.rindex(':')+1:] if ':' in cur and ':' in t else t print(' '.join(sorted(set(g(s) for s in ss if s != cur and s.startswith(cur)))))