2013-10-15 05:02:31 -04:00
#!bash
#
# bash completion file for core docker commands
#
# This script provides supports completion of:
# - commands and their options
2013-12-30 20:09:42 -05:00
# - container ids and names
2013-10-15 05:02:31 -04:00
# - 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
2014-01-20 03:26:01 -05:00
__docker_q() {
docker 2>/dev/null "$@"
}
2014-10-02 17:13:37 -04:00
__docker_containers_all() {
local IFS=$'\n'
local containers=( $(__docker_q ps -aq --no-trunc) )
if [ "$1" ]; then
containers=( $(__docker_q inspect --format "{{if $1}}{{.Id}}{{end}}" "${containers[@]}") )
fi
local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") )
names=( "${names[@]#/}" ) # trim off the leading "/" from the container names
unset IFS
COMPREPLY=( $(compgen -W "${names[*]} ${containers[*]}" -- "$cur") )
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_containers_running() {
__docker_containers_all '.State.Running'
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_containers_stopped() {
__docker_containers_all 'not .State.Running'
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_containers_pauseable() {
__docker_containers_all 'and .State.Running (not .State.Paused)'
2014-10-02 13:01:10 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_containers_unpauseable() {
__docker_containers_all '.State.Paused'
2014-10-02 13:01:10 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_image_repos() {
local repos="$(__docker_q images | awk 'NR>1 && $1 != "<none>" { print $1 }')"
COMPREPLY=( $(compgen -W "$repos" -- "$cur") )
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_image_repos_and_tags() {
local reposAndTags="$(__docker_q images | awk 'NR>1 && $1 != "<none>" { print $1; print $1":"$2 }')"
COMPREPLY=( $(compgen -W "$reposAndTags" -- "$cur") )
2013-10-15 05:02:31 -04:00
__ltrim_colon_completions "$cur"
}
2014-10-02 17:13:37 -04:00
__docker_image_repos_and_tags_and_ids() {
local images="$(__docker_q images -a --no-trunc | awk 'NR>1 { print $3; if ($1 != "<none>") { print $1; print $1":"$2 } }')"
COMPREPLY=( $(compgen -W "$images" -- "$cur") )
2013-10-15 05:02:31 -04:00
__ltrim_colon_completions "$cur"
}
2014-10-02 17:13:37 -04:00
__docker_containers_and_images() {
__docker_containers_all
local containers=( "${COMPREPLY[@]}" )
__docker_image_repos_and_tags_and_ids
COMPREPLY+=( "${containers[@]}" )
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
__docker_pos_first_nonflag() {
2014-01-11 03:00:03 -05:00
local argument_flags=$1
local counter=$cpos
while [ $counter -le $cword ]; do
if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then
(( counter++ ))
else
case "${words[$counter]}" in
-*)
;;
*)
break
;;
esac
fi
(( counter++ ))
done
echo $counter
}
2014-10-02 17:13:37 -04:00
_docker_docker() {
2013-10-15 05:02:31 -04:00
case "$prev" in
-H)
return
;;
*)
;;
esac
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-H" -- "$cur" ) )
;;
*)
2014-10-02 17:13:37 -04:00
COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_attach() {
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--no-stdin --sig-proxy" -- "$cur" ) )
;;
*)
local counter="$(__docker_pos_first_nonflag)"
if [ $cword -eq $counter ]; then
__docker_containers_running
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_build() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-t|--tag)
__docker_image_repos_and_tags
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-08-31 16:08:28 -04:00
COMPREPLY=( $( compgen -W "-t --tag -q --quiet --no-cache --rm --force-rm" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-01-11 03:00:03 -05:00
local counter="$(__docker_pos_first_nonflag '-t|--tag')"
if [ $cword -eq $counter ]; then
2014-07-08 22:26:23 -04:00
_filedir -d
2014-01-11 03:00:03 -05:00
fi
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_commit() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-m|--message|-a|--author|--run)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-m --message -a --author --run" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag '-m|--message|-a|--author|--run')
2013-10-15 05:02:31 -04:00
2014-01-11 03:00:03 -05:00
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_containers_all
2014-01-11 03:00:03 -05:00
return
fi
(( counter++ ))
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
return
2013-10-15 05:02:31 -04:00
fi
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_cp() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
case "$cur" in
*:)
return
;;
*)
__docker_containers_all
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
compopt -o nospace
return
;;
esac
fi
(( counter++ ))
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
_filedir
2014-01-11 03:00:03 -05:00
return
2013-10-15 05:02:31 -04:00
fi
}
2014-10-02 17:13:37 -04:00
_docker_create() {
2014-08-11 13:12:09 -04:00
case "$prev" in
-a|--attach)
COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) )
return
;;
--cidfile|--env-file)
_filedir
return
;;
--volumes-from)
__docker_containers_all
return
;;
-v|--volume)
case "$cur" in
*:*)
# TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)
;;
'')
COMPREPLY=( $( compgen -W '/' -- "$cur" ) )
compopt -o nospace
;;
/*)
_filedir
compopt -o nospace
;;
esac
return
;;
-e|--env)
COMPREPLY=( $( compgen -e -- "$cur" ) )
compopt -o nospace
return
;;
--link)
case "$cur" in
*:*)
;;
*)
__docker_containers_running
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
compopt -o nospace
;;
esac
return
;;
--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|-c|--cpu-shares|-n|--name|-p|--publish|--expose|--dns|--lxc-conf)
return
;;
*)
;;
esac
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-n --networking --privileged -P --publish-all -i --interactive -t --tty --cidfile --entrypoint -h --hostname -m --memory -u --user -w --workdir -c --cpu-shares --name -a --attach -v --volume --link -e --env -p --publish --expose --dns --volumes-from --lxc-conf" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag '--cidfile|--volumes-from|-v|--volume|-e|--env|--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|-c|--cpu-shares|-n|--name|-a|--attach|--link|-p|--publish|--expose|--dns|--lxc-conf')
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
fi
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_diff() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_containers_all
fi
}
2014-10-02 17:13:37 -04:00
_docker_events() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
--since)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2013-12-23 14:43:54 -05:00
COMPREPLY=( $( compgen -W "--since" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_exec() {
2014-09-16 14:46:24 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-d --detach -i --interactive -t --tty" -- "$cur" ) )
;;
*)
__docker_containers_running
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_export() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_containers_all
fi
}
2014-10-02 17:13:37 -04:00
_docker_help() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2014-10-02 17:13:37 -04:00
COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
fi
}
2014-10-02 17:13:37 -04:00
_docker_history() {
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-q --quiet --no-trunc" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_images() {
2013-10-15 05:02:31 -04:00
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-q --quiet -a --all --no-trunc -v --viz -t --tree" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_image_repos
fi
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_import() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
return
fi
(( counter++ ))
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
return
fi
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_info() {
2013-10-15 05:02:31 -04:00
return
}
2014-10-02 17:13:37 -04:00
_docker_inspect() {
2014-01-11 03:00:03 -05:00
case "$prev" in
-f|--format)
return
;;
*)
;;
esac
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-f --format" -- "$cur" ) )
;;
*)
__docker_containers_and_images
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_kill() {
2013-10-15 05:02:31 -04:00
__docker_containers_running
}
2014-10-02 17:13:37 -04:00
_docker_load() {
2014-01-11 03:00:03 -05:00
return
}
2014-10-02 17:13:37 -04:00
_docker_login() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-u|--username|-p|--password|-e|--email)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-u --username -p --password -e --email" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_logs() {
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-f --follow" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_containers_all
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_pause() {
2014-10-02 13:01:10 -04:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2014-10-02 17:13:37 -04:00
__docker_containers_pauseable
2014-10-02 13:01:10 -04:00
fi
}
2013-10-15 05:02:31 -04:00
2014-10-02 17:13:37 -04:00
_docker_port() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_containers_all
fi
}
2014-10-02 17:13:37 -04:00
_docker_ps() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-03-18 13:38:56 -04:00
--since|--before)
2014-06-19 12:11:32 -04:00
__docker_containers_all
2014-01-11 03:00:03 -05:00
;;
-n)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-03-18 13:38:56 -04:00
COMPREPLY=( $( compgen -W "-q --quiet -s --size -a --all --no-trunc -l --latest --since --before -n" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_pull() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-t|--tag)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-t --tag" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag '-t|--tag')
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
fi
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_push() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2014-06-19 12:11:32 -04:00
__docker_image_repos_and_tags
2014-01-11 03:00:03 -05:00
fi
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_restart() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-t|--time)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-t --time" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
__docker_containers_all
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_rm() {
2013-10-15 05:02:31 -04:00
case "$cur" in
-*)
2014-06-26 00:12:25 -04:00
COMPREPLY=( $( compgen -W "-f --force -l --link -v --volumes" -- "$cur" ) )
return
2013-10-15 05:02:31 -04:00
;;
*)
2014-06-26 00:12:25 -04:00
local force=
for arg in "${COMP_WORDS[@]}"; do
case "$arg" in
-f|--force)
__docker_containers_all
return
;;
esac
done
2013-10-15 05:02:31 -04:00
__docker_containers_stopped
2014-06-26 00:12:25 -04:00
return
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_rmi() {
2014-01-11 03:00:03 -05:00
__docker_image_repos_and_tags_and_ids
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_run() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-06-29 01:09:23 -04:00
-a|--attach)
COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) )
return
;;
--cidfile|--env-file)
2013-10-15 05:02:31 -04:00
_filedir
2014-06-29 01:09:23 -04:00
return
2013-10-15 05:02:31 -04:00
;;
2013-12-23 14:43:54 -05:00
--volumes-from)
2013-10-15 05:02:31 -04:00
__docker_containers_all
2014-06-29 01:09:23 -04:00
return
2013-10-15 05:02:31 -04:00
;;
2014-01-11 03:00:03 -05:00
-v|--volume)
2014-06-29 01:09:23 -04:00
case "$cur" in
*:*)
# TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)
;;
'')
COMPREPLY=( $( compgen -W '/' -- "$cur" ) )
compopt -o nospace
;;
/*)
_filedir
compopt -o nospace
;;
esac
2014-01-11 03:00:03 -05:00
return
;;
-e|--env)
COMPREPLY=( $( compgen -e -- "$cur" ) )
2014-06-29 01:09:23 -04:00
compopt -o nospace
return
;;
--link)
case "$cur" in
*:*)
;;
*)
__docker_containers_running
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
compopt -o nospace
;;
esac
2014-01-11 03:00:03 -05:00
return
;;
2014-09-16 14:46:24 -04:00
--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|--cpuset|-c|--cpu-shares|-n|--name|-p|--publish|--expose|--dns|--lxc-conf)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-09-29 06:44:32 -04:00
COMPREPLY=( $( compgen -W "--rm -d --detach -n --networking --privileged -P --publish-all -i --interactive -t --tty --cidfile --entrypoint -h --hostname -m --memory -u --user -w --workdir --cpuset -c --cpu-shares --sig-proxy --name -a --attach -v --volume --link -e --env -p --publish --expose --dns --volumes-from --lxc-conf --security-opt" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-09-29 06:44:32 -04:00
local counter=$(__docker_pos_first_nonflag '--cidfile|--volumes-from|-v|--volume|-e|--env|--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|--cpuset|-c|--cpu-shares|-n|--name|-a|--attach|--link|-p|--publish|--expose|--dns|--lxc-conf|--security-opt')
2013-10-15 05:02:31 -04:00
2014-01-11 03:00:03 -05:00
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
2013-10-15 05:02:31 -04:00
fi
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_save() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
fi
}
2014-10-02 17:13:37 -04:00
_docker_search() {
2014-01-11 03:00:03 -05:00
case "$prev" in
-s|--stars)
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-06-02 14:48:58 -04:00
COMPREPLY=( $( compgen -W "--no-trunc --automated -s --stars" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_start() {
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-a --attach -i --interactive" -- "$cur" ) )
;;
*)
__docker_containers_stopped
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_stop() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-01-11 03:00:03 -05:00
-t|--time)
2013-10-15 05:02:31 -04:00
return
;;
*)
;;
esac
case "$cur" in
-*)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -W "-t --time" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
__docker_containers_running
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_tag() {
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-f --force" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
return
fi
(( counter++ ))
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
return
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_unpause() {
2014-10-02 13:01:10 -04:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2014-10-02 17:13:37 -04:00
__docker_containers_unpauseable
2014-10-02 13:01:10 -04:00
fi
}
2014-10-02 17:13:37 -04:00
_docker_top() {
2014-01-11 03:00:03 -05:00
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
2013-10-15 05:02:31 -04:00
__docker_containers_running
fi
}
2014-10-02 17:13:37 -04:00
_docker_version() {
2013-10-15 05:02:31 -04:00
return
}
2014-10-02 17:13:37 -04:00
_docker_wait() {
2013-10-15 05:02:31 -04:00
__docker_containers_all
}
2014-10-02 17:13:37 -04:00
_docker() {
local commands=(
attach
build
commit
cp
create
diff
events
exec
export
history
images
import
info
insert
inspect
kill
load
login
logs
pause
port
ps
pull
push
restart
rm
rmi
run
save
search
start
stop
tag
top
unpause
version
wait
)
2013-10-15 05:02:31 -04:00
COMPREPLY=()
2014-01-11 03:00:03 -05:00
local cur prev words cword
2013-10-15 05:02:31 -04:00
_get_comp_words_by_ref -n : cur prev words cword
2014-01-11 03:00:03 -05:00
local command='docker'
local counter=1
2013-10-15 05:02:31 -04:00
while [ $counter -lt $cword ]; do
2014-01-11 03:00:03 -05:00
case "${words[$counter]}" in
2013-10-15 05:02:31 -04:00
-H)
(( counter++ ))
;;
-*)
;;
*)
2014-01-11 03:00:03 -05:00
command="${words[$counter]}"
2013-10-15 05:02:31 -04:00
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