| #!bash |
| # |
| # bash completion file for core docker commands |
| # |
| # This script provides supports completion of: |
| # - commands and their options |
| # - container ids |
| # - image repos and tags |
| # - filepaths |
| # |
| # To enable the completions either: |
| # - place this file in /etc/bash_completion.d |
| # or |
| # - copy this file and add the line below to your .bashrc after |
| # bash completion features are loaded |
| # . docker.bash |
| # |
| # Note: |
| # Currently, the completions will not work if the docker daemon is not |
| # bound to the default communication port/socket |
| # If the docker daemon is using a unix socket for communication your user |
| # must have access to the socket for the completions to function correctly |
| |
| __docker_containers_all() |
| { |
| local containers |
| containers="$( docker ps -a -q )" |
| COMPREPLY=( $( compgen -W "$containers" -- "$cur" ) ) |
| } |
| |
| __docker_containers_running() |
| { |
| local containers |
| containers="$( docker ps -q )" |
| COMPREPLY=( $( compgen -W "$containers" -- "$cur" ) ) |
| } |
| |
| __docker_containers_stopped() |
| { |
| local containers |
| containers="$( comm -13 <(docker ps -q | sort -u) <(docker ps -a -q | sort -u) )" |
| COMPREPLY=( $( compgen -W "$containers" -- "$cur" ) ) |
| } |
| |
| __docker_image_repos() |
| { |
| local repos |
| repos="$( docker images | awk 'NR>1{print $1}' )" |
| COMPREPLY=( $( compgen -W "$repos" -- "$cur" ) ) |
| } |
| |
| __docker_images() |
| { |
| local images |
| images="$( docker images | awk 'NR>1{print $1":"$2}' )" |
| COMPREPLY=( $( compgen -W "$images" -- "$cur" ) ) |
| __ltrim_colon_completions "$cur" |
| } |
| |
| __docker_image_repos_and_tags() |
| { |
| local repos images |
| repos="$( docker images | awk 'NR>1{print $1}' )" |
| images="$( docker images | awk 'NR>1{print $1":"$2}' )" |
| COMPREPLY=( $( compgen -W "$repos $images" -- "$cur" ) ) |
| __ltrim_colon_completions "$cur" |
| } |
| |
| __docker_containers_and_images() |
| { |
| local containers images |
| containers="$( docker ps -a -q )" |
| images="$( docker images | awk 'NR>1{print $1":"$2}' )" |
| COMPREPLY=( $( compgen -W "$images $containers" -- "$cur" ) ) |
| __ltrim_colon_completions "$cur" |
| } |
| |
| _docker_docker() |
| { |
| case "$prev" in |
| -H) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-H" -- "$cur" ) ) |
| ;; |
| *) |
| COMPREPLY=( $( compgen -W "$commands help" -- "$cur" ) ) |
| ;; |
| esac |
| } |
| |
| _docker_attach() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_running |
| fi |
| } |
| |
| _docker_build() |
| { |
| case "$prev" in |
| -t) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-no-cache -t -q -rm" -- "$cur" ) ) |
| ;; |
| *) |
| _filedir |
| ;; |
| esac |
| } |
| |
| _docker_commit() |
| { |
| case "$prev" in |
| -author|-m|-run) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-author -m -run" -- "$cur" ) ) |
| ;; |
| *) |
| local counter=$cpos |
| while [ $counter -le $cword ]; do |
| case "${words[$counter]}" in |
| -author|-m|-run) |
| (( counter++ )) |
| ;; |
| -*) |
| ;; |
| *) |
| break |
| ;; |
| esac |
| (( counter++ )) |
| done |
| |
| if [ $counter -eq $cword ]; then |
| __docker_containers_all |
| fi |
| ;; |
| esac |
| } |
| |
| _docker_cp() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_all |
| else |
| _filedir |
| fi |
| } |
| |
| _docker_diff() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_all |
| fi |
| } |
| |
| _docker_events() |
| { |
| case "$prev" in |
| -since) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-since" -- "$cur" ) ) |
| ;; |
| *) |
| ;; |
| esac |
| } |
| |
| _docker_export() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_all |
| fi |
| } |
| |
| _docker_help() |
| { |
| if [ $cpos -eq $cword ]; then |
| COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) |
| fi |
| } |
| |
| _docker_history() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_image_repos_and_tags |
| fi |
| } |
| |
| _docker_images() |
| { |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-a -notrunc -q -viz" -- "$cur" ) ) |
| ;; |
| *) |
| local counter=$cpos |
| while [ $counter -le $cword ]; do |
| case "${words[$counter]}" in |
| -*) |
| ;; |
| *) |
| break |
| ;; |
| esac |
| (( counter++ )) |
| done |
| |
| if [ $counter -eq $cword ]; then |
| __docker_image_repos |
| fi |
| ;; |
| esac |
| } |
| |
| _docker_import() |
| { |
| return |
| } |
| |
| _docker_info() |
| { |
| return |
| } |
| |
| _docker_insert() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_image_repos_and_tags |
| fi |
| } |
| |
| _docker_inspect() |
| { |
| __docker_containers_and_images |
| } |
| |
| _docker_kill() |
| { |
| __docker_containers_running |
| } |
| |
| _docker_login() |
| { |
| case "$prev" in |
| -e|-p|-u) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-e -p -u" -- "$cur" ) ) |
| ;; |
| *) |
| ;; |
| esac |
| } |
| |
| _docker_logs() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_all |
| fi |
| } |
| |
| _docker_port() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_all |
| fi |
| } |
| |
| _docker_ps() |
| { |
| case "$prev" in |
| -beforeId|-n|-sinceId) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-a -beforeId -l -n -notrunc -q -s -sinceId" -- "$cur" ) ) |
| ;; |
| *) |
| ;; |
| esac |
| } |
| |
| _docker_pull() |
| { |
| case "$prev" in |
| -t) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-t" -- "$cur" ) ) |
| ;; |
| *) |
| ;; |
| esac |
| } |
| |
| _docker_push() |
| { |
| __docker_image_repos |
| } |
| |
| _docker_restart() |
| { |
| case "$prev" in |
| -t) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-t" -- "$cur" ) ) |
| ;; |
| *) |
| __docker_containers_all |
| ;; |
| esac |
| } |
| |
| _docker_rm() |
| { |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-v" -- "$cur" ) ) |
| ;; |
| *) |
| __docker_containers_stopped |
| ;; |
| esac |
| } |
| |
| _docker_rmi() |
| { |
| __docker_image_repos_and_tags |
| } |
| |
| _docker_run() |
| { |
| case "$prev" in |
| -cidfile) |
| _filedir |
| ;; |
| -volumes-from) |
| __docker_containers_all |
| ;; |
| -a|-c|-dns|-e|-entrypoint|-h|-lxc-conf|-m|-p|-u|-v|-w) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-a -c -cidfile -d -dns -e -entrypoint -h -i -lxc-conf -m -n -p -privileged -t -u -v -volumes-from -w" -- "$cur" ) ) |
| ;; |
| *) |
| local counter=$cpos |
| while [ $counter -le $cword ]; do |
| case "${words[$counter]}" in |
| -a|-c|-cidfile|-dns|-e|-entrypoint|-h|-lxc-conf|-m|-p|-u|-v|-volumes-from|-w) |
| (( counter++ )) |
| ;; |
| -*) |
| ;; |
| *) |
| break |
| ;; |
| esac |
| (( counter++ )) |
| done |
| |
| if [ $counter -eq $cword ]; then |
| __docker_image_repos_and_tags |
| fi |
| ;; |
| esac |
| } |
| |
| _docker_search() |
| { |
| COMPREPLY=( $( compgen -W "-notrunc" -- "$cur" ) ) |
| } |
| |
| _docker_start() |
| { |
| __docker_containers_stopped |
| } |
| |
| _docker_stop() |
| { |
| case "$prev" in |
| -t) |
| return |
| ;; |
| *) |
| ;; |
| esac |
| |
| case "$cur" in |
| -*) |
| COMPREPLY=( $( compgen -W "-t" -- "$cur" ) ) |
| ;; |
| *) |
| __docker_containers_running |
| ;; |
| esac |
| } |
| |
| _docker_tag() |
| { |
| COMPREPLY=( $( compgen -W "-f" -- "$cur" ) ) |
| } |
| |
| _docker_top() |
| { |
| if [ $cpos -eq $cword ]; then |
| __docker_containers_running |
| fi |
| } |
| |
| _docker_version() |
| { |
| return |
| } |
| |
| _docker_wait() |
| { |
| __docker_containers_all |
| } |
| |
| _docker() |
| { |
| local cur prev words cword command="docker" counter=1 word cpos |
| local commands=" |
| attach |
| build |
| commit |
| cp |
| diff |
| events |
| export |
| history |
| images |
| import |
| info |
| insert |
| inspect |
| kill |
| login |
| logs |
| port |
| ps |
| pull |
| push |
| restart |
| rm |
| rmi |
| run |
| search |
| start |
| stop |
| tag |
| top |
| version |
| wait |
| " |
| |
| COMPREPLY=() |
| _get_comp_words_by_ref -n : cur prev words cword |
| |
| while [ $counter -lt $cword ]; do |
| word="${words[$counter]}" |
| case "$word" in |
| -H) |
| (( counter++ )) |
| ;; |
| -*) |
| ;; |
| *) |
| command="$word" |
| cpos=$counter |
| (( cpos++ )) |
| break |
| ;; |
| esac |
| (( counter++ )) |
| done |
| |
| local completions_func=_docker_${command} |
| declare -F $completions_func >/dev/null && $completions_func |
| |
| return 0 |
| } |
| |
| complete -F _docker docker |