20772f90ff
Should solve #1639.
543 lines
7.4 KiB
Bash
543 lines
7.4 KiB
Bash
#!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" -- "$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()
|
|
{
|
|
return
|
|
}
|
|
|
|
_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
|