2014-11-19 08:29:56 -05:00
#!/bin/bash
2013-10-15 05:02:31 -04:00
#
# bash completion file for core docker commands
#
2014-11-19 08:29:56 -05:00
# This script provides completion of:
2013-10-15 05:02:31 -04:00
# - 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
2014-11-19 08:29:56 -05:00
# - copy this file to e.g. ~/.docker-completion.sh and add the line
# below to your .bashrc after bash completion features are loaded
# . ~/.docker-completion.sh
2013-10-15 05:02:31 -04:00
#
# 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-11-17 11:13:58 -05:00
__docker_resolve_hostname() {
command -v host >/dev/null 2>&1 || return
COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') )
}
__docker_capabilities() {
# The list of capabilities is defined in types.go, ALL was added manually.
COMPREPLY=( $( compgen -W "
ALL
AUDIT_CONTROL
AUDIT_WRITE
BLOCK_SUSPEND
CHOWN
DAC_OVERRIDE
DAC_READ_SEARCH
FOWNER
FSETID
IPC_LOCK
IPC_OWNER
KILL
LEASE
LINUX_IMMUTABLE
MAC_ADMIN
MAC_OVERRIDE
MKNOD
NET_ADMIN
NET_BIND_SERVICE
NET_BROADCAST
NET_RAW
SETFCAP
SETGID
SETPCAP
SETUID
SYS_ADMIN
SYS_BOOT
SYS_CHROOT
SYSLOG
SYS_MODULE
SYS_NICE
SYS_PACCT
SYS_PTRACE
SYS_RAWIO
SYS_RESOURCE
SYS_TIME
SYS_TTY_CONFIG
WAKE_ALARM
" -- "$cur" ) )
}
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
;;
2014-11-17 11:13:58 -05:00
-v|--volume|--device)
2014-08-11 13:12:09 -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
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
;;
2014-11-17 11:13:58 -05:00
--add-host)
case "$cur" in
*:)
__docker_resolve_hostname
return
;;
esac
;;
--cap-add|--cap-drop)
__docker_capabilities
return
;;
--net)
case "$cur" in
container:*)
local cur=${cur#*:}
__docker_containers_all
;;
*)
COMPREPLY=( $( compgen -W "bridge none container: host" -- "$cur") )
if [ "${COMPREPLY[*]}" = "container:" ] ; then
compopt -o nospace
fi
;;
esac
return
;;
--restart)
case "$cur" in
on-failure:*)
;;
*)
COMPREPLY=( $( compgen -W "no on-failure on-failure: always" -- "$cur") )
;;
esac
return
;;
--security-opt)
case "$cur" in
label:*:*)
;;
label:*)
local cur=${cur##*:}
COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "$cur") )
if [ "${COMPREPLY[*]}" != "disable" ] ; then
compopt -o nospace
fi
;;
*)
COMPREPLY=( $( compgen -W "label apparmor" -S ":" -- "$cur") )
compopt -o nospace
;;
esac
return
;;
--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|--cpuset|-c|--cpu-shares|-n|--name|-p|--publish|--expose|--dns|--lxc-conf|--dns-search)
2014-08-11 13:12:09 -04:00
return
;;
esac
case "$cur" in
-*)
2014-11-19 08:29:56 -05:00
COMPREPLY=( $( compgen -W "--privileged -P --publish-all -i --interactive -t --tty --cidfile --entrypoint -h --hostname -m --memory -u --user -w --workdir --cpuset -c --cpu-shares --name -a --attach -v --volume --link -e --env --env-file -p --publish --expose --dns --volumes-from --lxc-conf --security-opt --add-host --cap-add --cap-drop --device --dns-search --net --restart" -- "$cur" ) )
2014-08-11 13:12:09 -04:00
;;
*)
2014-11-17 11:13:58 -05:00
local counter=$(__docker_pos_first_nonflag '--cidfile|--volumes-from|-v|--volume|-e|--env|--env-file|--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|--add-host|--cap-add|--cap-drop|--device|--dns-search|--net|--restart')
2014-08-11 13:12:09 -04:00
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
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-11-17 11:13:58 -05:00
-v|--volume|--device)
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-11-17 11:13:58 -05:00
--add-host)
case "$cur" in
*:)
__docker_resolve_hostname
return
;;
esac
;;
--cap-add|--cap-drop)
__docker_capabilities
return
;;
--net)
case "$cur" in
container:*)
local cur=${cur#*:}
__docker_containers_all
;;
*)
COMPREPLY=( $( compgen -W "bridge none container: host" -- "$cur") )
if [ "${COMPREPLY[*]}" = "container:" ] ; then
compopt -o nospace
fi
;;
esac
return
;;
--restart)
case "$cur" in
on-failure:*)
;;
*)
COMPREPLY=( $( compgen -W "no on-failure on-failure: always" -- "$cur") )
;;
esac
return
;;
--security-opt)
case "$cur" in
label:*:*)
;;
label:*)
local cur=${cur##*:}
COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "$cur") )
if [ "${COMPREPLY[*]}" != "disable" ] ; then
compopt -o nospace
fi
;;
*)
COMPREPLY=( $( compgen -W "label apparmor" -S ":" -- "$cur") )
compopt -o nospace
;;
esac
return
;;
--entrypoint|-h|--hostname|-m|--memory|-u|--user|-w|--workdir|--cpuset|-c|--cpu-shares|-n|--name|-p|--publish|--expose|--dns|--lxc-conf|--dns-search)
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2014-11-19 08:29:56 -05:00
COMPREPLY=( $( compgen -W "--rm -d --detach --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 --env-file -p --publish --expose --dns --volumes-from --lxc-conf --security-opt --add-host --cap-add --cap-drop --device --dns-search --net --restart" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2014-11-17 11:13:58 -05:00
local counter=$(__docker_pos_first_nonflag '--cidfile|--volumes-from|-v|--volume|-e|--env|--env-file|--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|--add-host|--cap-add|--cap-drop|--device|--dns-search|--net|--restart')
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-11-19 08:29:56 -05:00
local command='docker' cpos=0
2014-01-11 03:00:03 -05:00
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