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-12-30 13:18:21 -05:00
#
# Note for developers:
2015-03-25 13:38:17 -04:00
# Please arrange options sorted alphabetically by long name with the short
2014-12-30 13:18:21 -05:00
# options immediately following their corresponding long form.
# This order should be applied to lists, alternatives and code blocks.
2013-10-15 05:02:31 -04:00
2014-01-20 03:26:01 -05:00
__docker_q() {
2015-05-13 16:39:25 -04:00
docker ${host:+-H "$host"} 2>/dev/null "$@"
2014-01-20 03:26:01 -05:00
}
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
}
2015-03-29 12:24:08 -04:00
__docker_container_names() {
local containers=( $(__docker_q ps -aq --no-trunc) )
local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") )
names=( "${names[@]#/}" ) # trim off the leading "/" from the container names
COMPREPLY=( $(compgen -W "${names[*]}" -- "$cur") )
}
__docker_container_ids() {
local containers=( $(__docker_q ps -aq) )
COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") )
}
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
}
2015-01-19 12:35:40 -05:00
# Transforms a multiline list of strings into a single line string
# with the words separated by "|".
# This is used to prepare arguments to __docker_pos_first_nonflag().
__docker_to_alternatives() {
local parts=( $1 )
local IFS='|'
echo "${parts[*]}"
}
# Transforms a multiline list of options into an extglob pattern
# suitable for use in case statements.
__docker_to_extglob() {
local extglob=$( __docker_to_alternatives "$1" )
echo "@($extglob)"
}
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
2015-02-11 02:46:32 -05:00
AUDIT_READ
2014-11-17 11:13:58 -05:00
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" ) )
}
2015-02-02 15:16:18 -05:00
# a selection of the available signals that is most likely of interest in the
# context of docker containers.
__docker_signals() {
local signals=(
SIGCONT
SIGHUP
SIGINT
SIGKILL
SIGQUIT
SIGSTOP
SIGTERM
SIGUSR1
SIGUSR2
)
COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo $cur | tr '[:lower:]' '[:upper:]')" ) )
}
2014-10-02 17:13:37 -04:00
_docker_docker() {
2015-01-19 12:35:40 -05:00
local boolean_options="
--daemon -d
--debug -D
--help -h
--icc
--ip-forward
--ip-masq
--iptables
--ipv6
--selinux-enabled
--tls
--tlsverify
2015-05-28 11:06:47 -04:00
--userland-proxy=false
2015-01-19 12:35:40 -05:00
--version -v
"
2013-10-15 05:02:31 -04:00
case "$prev" in
2015-05-28 11:06:47 -04:00
--exec-root|--graph|-g)
2015-01-19 12:35:40 -05:00
_filedir -d
return
;;
2015-03-31 22:35:05 -04:00
--log-driver)
COMPREPLY=( $( compgen -W "json-file syslog none" -- "$cur" ) )
return
;;
2015-01-19 12:35:40 -05:00
--log-level|-l)
COMPREPLY=( $( compgen -W "debug info warn error fatal" -- "$cur" ) )
return
;;
--pidfile|-p|--tlscacert|--tlscert|--tlskey)
_filedir
return
;;
--storage-driver|-s)
COMPREPLY=( $( compgen -W "aufs devicemapper btrfs overlay" -- "$(echo $cur | tr '[:upper:]' '[:lower:]')" ) )
return
;;
$main_options_with_args_glob )
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-01-19 12:35:40 -05:00
COMPREPLY=( $( compgen -W "$boolean_options $main_options_with_args" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
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
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --no-stdin --sig-proxy" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
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
2015-05-28 11:06:47 -04:00
--cgroup-parent|--cpuset-cpus|--cpuset-mems|--cpu-shares|-c|--cpu-period|--cpu-quota|--memory|-m|--memory-swap)
2013-10-15 05:02:31 -04:00
return
;;
2015-03-06 02:13:27 -05:00
--file|-f)
_filedir
2015-03-25 13:38:17 -04:00
return
;;
2015-05-28 11:06:47 -04:00
--tag|-t)
__docker_image_repos_and_tags
return
;;
2013-10-15 05:02:31 -04:00
esac
case "$cur" in
-*)
2015-05-28 11:06:47 -04:00
COMPREPLY=( $( compgen -W "--cgroup-parent --cpuset-cpus --cpuset-mems --cpu-shares -c --cpu-period --cpu-quota --file -f --force-rm --help --memory -m --memory-swap --no-cache --pull --quiet -q --rm --tag -t" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2015-05-28 11:06:47 -04:00
local counter="$(__docker_pos_first_nonflag '--cgroup-parent|--cpuset-cpus|--cpuset-mems|--cpu-shares|-c|--cpu-period|--cpu-quota|--file|-f|--memory|-m|--memory-swap|--tag|-t')"
2014-01-11 03:00:03 -05:00
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
2015-03-17 12:06:23 -04:00
--author|-a|--change|-c|--message|-m)
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--author -a --change -c --help --message -m --pause -p" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2015-03-17 12:06:23 -04:00
local counter=$(__docker_pos_first_nonflag '--author|-a|--change|-c|--message|-m')
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() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
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++ ))
2014-01-11 03:00:03 -05:00
2015-03-17 12:06:23 -04:00
if [ $cword -eq $counter ]; then
2015-03-18 13:10:51 -04:00
_filedir -d
2015-03-17 12:06:23 -04:00
return
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_create() {
2014-12-15 15:07:41 -05:00
_docker_run
2014-08-11 13:12:09 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_diff() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$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_events() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2015-02-19 07:43:09 -05:00
--filter|-f)
COMPREPLY=( $( compgen -S = -W "container event image" -- "$cur" ) )
compopt -o nospace
return
;;
--since|--until)
return
;;
esac
# "=" gets parsed to a word and assigned to either $cur or $prev depending on whether
# it is the last character or not. So we search for "xxx=" in the the last two words.
case "${words[$cword-2]}$prev=" in
*container=*)
cur="${cur#=}"
__docker_containers_all
return
;;
*event=*)
2015-07-07 02:58:35 -04:00
COMPREPLY=( $( compgen -W "
attach
commit
copy
create
delete
destroy
die
exec_create
exec_start
export
import
kill
oom
pause
pull
push
rename
resize
restart
start
stop
tag
top
unpause
untag
" -- "${cur#=}" ) )
2015-02-19 07:43:09 -05:00
return
;;
*image=*)
cur="${cur#=}"
__docker_image_repos_and_tags_and_ids
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--filter -f --help --since --until" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_exec() {
2015-05-28 11:06:47 -04:00
case "$prev" in
--user|-u)
return
;;
esac
2014-09-16 14:46:24 -04:00
case "$cur" in
-*)
2015-05-26 17:02:10 -04:00
COMPREPLY=( $( compgen -W "--detach -d --help --interactive -i -t --tty -u --user" -- "$cur" ) )
2014-09-16 14:46:24 -04:00
;;
*)
__docker_containers_running
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_export() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$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_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
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --no-trunc --quiet -q" -- "$cur" ) )
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
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_images() {
2015-03-17 12:06:23 -04:00
case "$prev" in
--filter|-f)
2015-03-29 12:24:08 -04:00
COMPREPLY=( $( compgen -W "dangling=true label=" -- "$cur" ) )
if [ "$COMPREPLY" = "label=" ]; then
compopt -o nospace
fi
2015-03-17 12:06:23 -04:00
return
;;
esac
case "${words[$cword-2]}$prev=" in
*dangling=*)
COMPREPLY=( $( compgen -W "true false" -- "${cur#=}" ) )
return
;;
2015-03-29 12:24:08 -04:00
*label=*)
return
;;
2015-03-17 12:06:23 -04:00
esac
2013-10-15 05:02:31 -04:00
case "$cur" in
-*)
2015-03-31 22:35:05 -04:00
COMPREPLY=( $( compgen -W "--all -a --digests --filter -f --help --no-trunc --quiet -q" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
2015-03-29 12:24:08 -04:00
=)
return
;;
2013-10-15 05:02:31 -04:00
*)
2015-03-29 12:24:08 -04:00
__docker_image_repos
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_import() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
return
fi
(( counter++ ))
2014-01-11 03:00:03 -05:00
2015-03-17 12:06:23 -04:00
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_info() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_inspect() {
2014-01-11 03:00:03 -05:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--format|-f)
2014-01-11 03:00:03 -05:00
return
;;
2015-06-26 10:47:31 -04:00
--type)
COMPREPLY=( $( compgen -W "image container" -- "$cur" ) )
return
;;
2014-01-11 03:00:03 -05:00
esac
case "$cur" in
-*)
2015-06-26 10:47:31 -04:00
COMPREPLY=( $( compgen -W "--format -f --type --help" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
__docker_containers_and_images
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_kill() {
2015-02-02 15:16:18 -05:00
case "$prev" in
--signal|-s)
__docker_signals
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --signal -s" -- "$cur" ) )
2015-02-02 15:16:18 -05:00
;;
*)
__docker_containers_running
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_load() {
2014-12-29 13:21:45 -05:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--input|-i)
2014-12-29 13:21:45 -05:00
_filedir
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --input -i" -- "$cur" ) )
2014-12-29 13:21:45 -05:00
;;
esac
2014-01-11 03:00:03 -05:00
}
2014-10-02 17:13:37 -04:00
_docker_login() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--email|-e|--password|-p|--username|-u)
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--email -e --help --password -p --username -u" -- "$cur" ) )
;;
esac
}
_docker_logout() {
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_logs() {
2015-03-17 12:06:23 -04:00
case "$prev" in
2015-05-28 11:06:47 -04:00
--since|--tail)
2015-03-17 12:06:23 -04:00
return
;;
esac
2014-01-11 03:00:03 -05:00
case "$cur" in
-*)
2015-04-14 00:36:12 -04:00
COMPREPLY=( $( compgen -W "--follow -f --help --since --tail --timestamps -t" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
2015-03-17 12:06:23 -04:00
local counter=$(__docker_pos_first_nonflag '--tail')
2014-01-11 03:00:03 -05:00
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() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_containers_pauseable
fi
;;
esac
2014-10-02 13:01:10 -04:00
}
2013-10-15 05:02:31 -04:00
2014-10-02 17:13:37 -04:00
_docker_port() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$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_ps() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--before|--since)
2014-06-19 12:11:32 -04:00
__docker_containers_all
2014-01-11 03:00:03 -05:00
;;
2015-03-17 12:06:23 -04:00
--filter|-f)
2015-03-29 12:24:08 -04:00
COMPREPLY=( $( compgen -S = -W "exited id label name status" -- "$cur" ) )
2015-03-17 12:06:23 -04:00
compopt -o nospace
return
;;
2014-01-11 03:00:03 -05:00
-n)
2013-10-15 05:02:31 -04:00
return
;;
esac
2015-03-17 12:06:23 -04:00
case "${words[$cword-2]}$prev=" in
2015-03-29 12:24:08 -04:00
*id=*)
cur="${cur#=}"
__docker_container_ids
return
;;
*name=*)
cur="${cur#=}"
__docker_container_names
return
;;
2015-03-17 12:06:23 -04:00
*status=*)
COMPREPLY=( $( compgen -W "exited paused restarting running" -- "${cur#=}" ) )
return
;;
esac
2013-10-15 05:02:31 -04:00
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--all -a --before --filter -f --help --latest -l -n --no-trunc --quiet -q --size -s --since" -- "$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 "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--all-tags -a --help" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2015-03-17 12:06:23 -04:00
local counter=$(__docker_pos_first_nonflag)
2014-01-11 03:00:03 -05:00
if [ $cword -eq $counter ]; then
2015-05-01 12:04:24 -04:00
for arg in "${COMP_WORDS[@]}"; do
case "$arg" in
--all-tags|-a)
__docker_image_repos
return
;;
esac
done
2014-01-11 03:00:03 -05:00
__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() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags
fi
;;
esac
2013-10-15 05:02:31 -04:00
}
2015-02-18 14:49:05 -05:00
_docker_rename() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_containers_all
fi
;;
esac
2015-02-18 14:49:05 -05:00
}
2014-10-02 17:13:37 -04:00
_docker_restart() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--time|-t)
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --time -t" -- "$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
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--force -f --help --link -l --volumes -v" -- "$cur" ) )
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
2014-12-30 13:18:21 -05:00
--force|-f)
2014-06-26 00:12:25 -04:00
__docker_containers_all
return
;;
esac
done
2013-10-15 05:02:31 -04:00
__docker_containers_stopped
;;
esac
}
2014-10-02 17:13:37 -04:00
_docker_rmi() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) )
;;
*)
__docker_image_repos_and_tags_and_ids
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_run() {
2014-12-15 15:07:41 -05:00
local options_with_args="
--add-host
2015-05-28 11:06:47 -04:00
--blkio-weight
2014-12-30 13:18:21 -05:00
--attach -a
2014-12-15 15:07:41 -05:00
--cap-add
--cap-drop
2015-03-24 08:15:16 -04:00
--cgroup-parent
2014-12-15 15:07:41 -05:00
--cidfile
--cpuset
2015-04-08 04:58:59 -04:00
--cpu-period
2015-04-20 11:16:47 -04:00
--cpu-quota
2015-05-28 11:06:47 -04:00
--cpu-shares -c
2014-12-15 15:07:41 -05:00
--device
--dns
--dns-search
--entrypoint
2014-12-30 13:18:21 -05:00
--env -e
2014-12-15 15:07:41 -05:00
--env-file
--expose
2014-12-30 13:18:21 -05:00
--hostname -h
2014-12-29 13:21:45 -05:00
--ipc
2015-03-24 08:15:16 -04:00
--label -l
--label-file
2014-12-15 15:07:41 -05:00
--link
2015-03-24 08:15:16 -04:00
--log-driver
2014-12-15 15:07:41 -05:00
--lxc-conf
2014-12-29 13:21:45 -05:00
--mac-address
2014-12-30 13:18:21 -05:00
--memory -m
2015-03-06 02:13:27 -05:00
--memory-swap
2014-12-15 15:07:41 -05:00
--name
--net
2015-03-06 02:13:27 -05:00
--pid
2014-12-30 13:18:21 -05:00
--publish -p
2014-12-15 15:07:41 -05:00
--restart
--security-opt
2014-12-30 13:18:21 -05:00
--user -u
2015-03-09 08:36:09 -04:00
--ulimit
2015-05-28 11:06:47 -04:00
--uts
2014-12-15 15:07:41 -05:00
--volumes-from
2014-12-30 13:18:21 -05:00
--volume -v
--workdir -w
2014-12-15 15:07:41 -05:00
"
local all_options="$options_with_args
2015-03-06 02:13:27 -05:00
--help
2014-12-30 13:18:21 -05:00
--interactive -i
2014-12-15 15:07:41 -05:00
--privileged
2014-12-30 13:18:21 -05:00
--publish-all -P
2015-03-06 02:13:27 -05:00
--read-only
2014-12-30 13:18:21 -05:00
--tty -t
2014-12-15 15:07:41 -05:00
"
[ "$command" = "run" ] && all_options="$all_options
2014-12-30 13:18:21 -05:00
--detach -d
2014-12-15 15:07:41 -05:00
--rm
--sig-proxy
"
2015-01-19 12:35:40 -05:00
local options_with_args_glob=$(__docker_to_extglob "$options_with_args")
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--add-host)
case "$cur" in
*:)
__docker_resolve_hostname
return
;;
esac
;;
--attach|-a)
2014-06-29 01:09:23 -04:00
COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) )
return
;;
2014-12-30 13:18:21 -05:00
--cap-add|--cap-drop)
__docker_capabilities
2014-06-29 01:09:23 -04:00
return
2013-10-15 05:02:31 -04:00
;;
2015-03-28 14:32:33 -04:00
--cidfile|--env-file|--label-file)
2014-12-30 13:18:21 -05:00
_filedir
2014-06-29 01:09:23 -04:00
return
2013-10-15 05:02:31 -04:00
;;
2015-02-16 13:23:29 -05:00
--device|--volume|-v)
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
;;
2014-12-30 13:18:21 -05:00
--env|-e)
2014-01-11 03:00:03 -05:00
COMPREPLY=( $( compgen -e -- "$cur" ) )
2014-06-29 01:09:23 -04:00
compopt -o nospace
return
;;
2014-12-29 13:21:45 -05:00
--ipc)
case "$cur" in
*:*)
cur="${cur#*:}"
__docker_containers_running
;;
*)
COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) )
if [ "$COMPREPLY" = "container:" ]; then
compopt -o nospace
fi
;;
esac
return
;;
2014-06-29 01:09:23 -04:00
--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
;;
2015-03-24 08:15:16 -04:00
--log-driver)
COMPREPLY=( $( compgen -W "json-file syslog none" -- "$cur") )
return
;;
2014-11-17 11:13:58 -05:00
--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
;;
2014-12-30 13:18:21 -05:00
--volumes-from)
__docker_containers_all
return
;;
2015-01-19 12:35:40 -05:00
$options_with_args_glob )
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2014-12-15 15:07:41 -05:00
COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) )
2013-10-15 05:02:31 -04:00
;;
*)
2015-01-19 12:35:40 -05:00
local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) )
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-12-29 13:21:45 -05:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--output|-o)
2014-12-29 13:21:45 -05:00
_filedir
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) )
2014-12-29 13:21:45 -05:00
;;
*)
__docker_image_repos_and_tags_and_ids
;;
esac
2014-01-11 03:00:03 -05:00
}
2014-10-02 17:13:37 -04:00
_docker_search() {
2014-01-11 03:00:03 -05:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--stars|-s)
2014-01-11 03:00:03 -05:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--automated --help --no-trunc --stars -s" -- "$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
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--attach -a --help --interactive -i" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
__docker_containers_stopped
;;
esac
2013-10-15 05:02:31 -04:00
}
2015-01-26 14:01:40 -05:00
_docker_stats() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
2015-02-13 11:45:04 -05:00
COMPREPLY=( $( compgen -W "--no-stream --help" -- "$cur" ) )
2015-03-17 12:06:23 -04:00
;;
*)
__docker_containers_running
;;
esac
2015-01-26 14:01:40 -05:00
}
2014-10-02 17:13:37 -04:00
_docker_stop() {
2013-10-15 05:02:31 -04:00
case "$prev" in
2014-12-30 13:18:21 -05:00
--time|-t)
2013-10-15 05:02:31 -04:00
return
;;
esac
case "$cur" in
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--help --time -t" -- "$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
-*)
2015-03-17 12:06:23 -04:00
COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) )
2014-01-11 03:00:03 -05:00
;;
*)
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() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_containers_unpauseable
fi
;;
esac
2014-10-02 13:01:10 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_top() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$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_version() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker_wait() {
2015-03-17 12:06:23 -04:00
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
;;
*)
__docker_containers_all
;;
esac
2013-10-15 05:02:31 -04:00
}
2014-10-02 17:13:37 -04:00
_docker() {
2015-01-19 12:35:40 -05:00
local previous_extglob_setting=$(shopt -p extglob)
shopt -s extglob
2014-10-02 17:13:37 -04:00
local commands=(
attach
build
commit
cp
create
diff
events
exec
export
history
images
import
info
inspect
kill
load
login
2015-03-17 12:06:23 -04:00
logout
2014-10-02 17:13:37 -04:00
logs
pause
port
ps
pull
push
2015-02-18 14:49:05 -05:00
rename
2014-10-02 17:13:37 -04:00
restart
rm
rmi
run
save
search
start
2015-01-26 14:01:40 -05:00
stats
2014-10-02 17:13:37 -04:00
stop
tag
top
unpause
version
wait
)
2013-10-15 05:02:31 -04:00
2015-01-19 12:35:40 -05:00
local main_options_with_args="
2015-03-10 04:14:43 -04:00
--api-cors-header
2015-01-19 12:35:40 -05:00
--bip
--bridge -b
2015-05-28 11:06:47 -04:00
--default-gateway
--default-gateway-v6
2015-03-09 08:36:09 -04:00
--default-ulimit
2015-01-19 12:35:40 -05:00
--dns
--dns-search
--exec-driver -e
2015-01-28 17:54:25 -05:00
--exec-opt
2015-05-14 22:59:11 -04:00
--exec-root
2015-01-19 12:35:40 -05:00
--fixed-cidr
--fixed-cidr-v6
--graph -g
--group -G
--host -H
--insecure-registry
--ip
--label
2015-03-31 22:35:05 -04:00
--log-driver
2015-01-19 12:35:40 -05:00
--log-level -l
--mtu
--pidfile -p
--registry-mirror
--storage-driver -s
--storage-opt
--tlscacert
--tlscert
--tlskey
"
local main_options_with_args_glob=$(__docker_to_extglob "$main_options_with_args")
2015-05-13 16:39:25 -04:00
local host
2015-01-19 12:35:40 -05:00
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
2015-05-13 16:39:25 -04:00
# save host so that completion can use custom daemon
--host|-H)
(( counter++ ))
host="${words[$counter]}"
;;
2015-01-19 12:35:40 -05:00
$main_options_with_args_glob )
2013-10-15 05:02:31 -04:00
(( counter++ ))
;;
-*)
;;
2015-05-28 11:06:47 -04:00
=)
(( counter++ ))
;;
2013-10-15 05:02:31 -04:00
*)
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
2015-01-19 12:35:40 -05:00
eval "$previous_extglob_setting"
2013-10-15 05:02:31 -04:00
return 0
}
complete -F _docker docker