Linux web-conference.aiou.edu.pk 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64
Apache/2.4.41 (Ubuntu)
: 172.16.50.247 | : 3.145.166.178
Cant Read [ /etc/named.conf ]
7.4.3-4ubuntu2.28
appadmin
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
usr /
share /
bash-completion /
completions /
[ HOME SHELL ]
Name
Size
Permission
Action
2to3
908
B
-rw-r--r--
7z
4.12
KB
-rw-r--r--
7za
4.12
KB
-rw-r--r--
_adb
1.74
KB
-rw-r--r--
_cal
926
B
-rw-r--r--
_chfn
238
B
-rw-r--r--
_chsh
690
B
-rw-r--r--
_dmesg
909
B
-rw-r--r--
_eject
793
B
-rw-r--r--
_hexdump
669
B
-rw-r--r--
_hwclock
605
B
-rw-r--r--
_ionice
1.23
KB
-rw-r--r--
_look
447
B
-rw-r--r--
_mock
2.01
KB
-rw-r--r--
_modules
2.48
KB
-rw-r--r--
_mount
2.02
KB
-rw-r--r--
_mount.linux
10.47
KB
-rw-r--r--
_newgrp
432
B
-rw-r--r--
_nmcli
6.1
KB
-rw-r--r--
_renice
769
B
-rw-r--r--
_repomanage
605
B
-rw-r--r--
_reptyr
547
B
-rw-r--r--
_rfkill
931
B
-rw-r--r--
_rtcwake
863
B
-rw-r--r--
_runuser
241
B
-rw-r--r--
_su
981
B
-rw-r--r--
_svn
8.62
KB
-rw-r--r--
_svnadmin
2.27
KB
-rw-r--r--
_svnlook
1.94
KB
-rw-r--r--
_udevadm
2.08
KB
-rw-r--r--
_umount
629
B
-rw-r--r--
_umount.linux
4.47
KB
-rw-r--r--
_write
239
B
-rw-r--r--
_xm
7.53
KB
-rw-r--r--
_yum
4.37
KB
-rw-r--r--
a2disconf
1.44
KB
-rw-r--r--
a2dismod
1.44
KB
-rw-r--r--
a2dissite
1.44
KB
-rw-r--r--
a2enconf
1.44
KB
-rw-r--r--
a2enmod
1.44
KB
-rw-r--r--
a2ensite
1.44
KB
-rw-r--r--
a2x
895
B
-rw-r--r--
abook
1.18
KB
-rw-r--r--
aclocal
844
B
-rw-r--r--
aclocal-1.10
844
B
-rw-r--r--
aclocal-1.11
844
B
-rw-r--r--
aclocal-1.12
844
B
-rw-r--r--
aclocal-1.13
844
B
-rw-r--r--
aclocal-1.14
844
B
-rw-r--r--
aclocal-1.15
844
B
-rw-r--r--
aclocal-1.16
844
B
-rw-r--r--
acpi
452
B
-rw-r--r--
add_members
761
B
-rw-r--r--
addpart
447
B
-rw-r--r--
alias
490
B
-rw-r--r--
alpine
873
B
-rw-r--r--
alternatives
2.35
KB
-rw-r--r--
animate
8.79
KB
-rw-r--r--
ant
2.71
KB
-rw-r--r--
apache2ctl
380
B
-rw-r--r--
appdata-validate
788
B
-rw-r--r--
apropos
2.8
KB
-rw-r--r--
apt
6.94
KB
-rw-r--r--
apt-build
1.42
KB
-rw-r--r--
apt-cache
1.99
KB
-rw-r--r--
apt-get
3.7
KB
-rw-r--r--
aptitude
3
KB
-rw-r--r--
aptitude-curses
3
KB
-rw-r--r--
arch
1.05
KB
-rw-r--r--
arm-koji
6.17
KB
-rw-r--r--
arp
1.55
KB
-rw-r--r--
arping
599
B
-rw-r--r--
arpspoof
564
B
-rw-r--r--
asciidoc
1.16
KB
-rw-r--r--
asciidoc.py
1.16
KB
-rw-r--r--
aspell
3.29
KB
-rw-r--r--
autoconf
947
B
-rw-r--r--
autoheader
1009
B
-rw-r--r--
automake
868
B
-rw-r--r--
automake-1.10
868
B
-rw-r--r--
automake-1.11
868
B
-rw-r--r--
automake-1.12
868
B
-rw-r--r--
automake-1.13
868
B
-rw-r--r--
automake-1.14
868
B
-rw-r--r--
automake-1.15
868
B
-rw-r--r--
automake-1.16
868
B
-rw-r--r--
autoreconf
1009
B
-rw-r--r--
autorpm
348
B
-rw-r--r--
autoscan
739
B
-rw-r--r--
autossh
15.54
KB
-rw-r--r--
autoupdate
739
B
-rw-r--r--
avctrl
471
B
-rw-r--r--
badblocks
595
B
-rw-r--r--
bind
832
B
-rw-r--r--
bk
429
B
-rw-r--r--
blkdiscard
639
B
-rw-r--r--
blkid
2.07
KB
-rw-r--r--
blkzone
971
B
-rw-r--r--
blockdev
725
B
-rw-r--r--
bootctl
2.85
KB
-rw-r--r--
brctl
1.02
KB
-rw-r--r--
bsdtar
18.47
KB
-rw-r--r--
btdownloadcurses.py
1.03
KB
-rw-r--r--
btdownloadgui.py
1.03
KB
-rw-r--r--
btdownloadheadless.py
1.03
KB
-rw-r--r--
btrfs
3.38
KB
-rw-r--r--
busctl
7.18
KB
-rw-r--r--
bzip2
1.06
KB
-rw-r--r--
c++
2.58
KB
-rw-r--r--
cancel
555
B
-rw-r--r--
cardctl
380
B
-rw-r--r--
carton
1.8
KB
-rw-r--r--
cc
2.58
KB
-rw-r--r--
ccache
1014
B
-rw-r--r--
ccze
1.16
KB
-rw-r--r--
cdrecord
3.49
KB
-rw-r--r--
cfagent
419
B
-rw-r--r--
cfdisk
546
B
-rw-r--r--
cfrun
1.25
KB
-rw-r--r--
chage
651
B
-rw-r--r--
change_pw
529
B
-rw-r--r--
chcpu
1.49
KB
-rw-r--r--
check_db
374
B
-rw-r--r--
check_perms
319
B
-rw-r--r--
checksec
738
B
-rw-r--r--
chgrp
949
B
-rw-r--r--
chkconfig
903
B
-rw-r--r--
chmem
501
B
-rw-r--r--
chmod
867
B
-rw-r--r--
chown
1.08
KB
-rw-r--r--
chpasswd
687
B
-rw-r--r--
chrome
1.37
KB
-rw-r--r--
chromium
1.37
KB
-rw-r--r--
chromium-browser
1.37
KB
-rw-r--r--
chronyc
1.53
KB
-rw-r--r--
chrpath
528
B
-rw-r--r--
chrt
920
B
-rw-r--r--
ci
890
B
-rw-r--r--
ciptool
9.45
KB
-rw-r--r--
civclient
1.02
KB
-rw-r--r--
civserver
473
B
-rw-r--r--
cksfv
520
B
-rw-r--r--
cleanarch
352
B
-rw-r--r--
clisp
668
B
-rw-r--r--
clone_member
540
B
-rw-r--r--
cloud-init
3.24
KB
-rw-r--r--
clzip
1.1
KB
-rw-r--r--
co
890
B
-rw-r--r--
colormake
6.02
KB
-rw-r--r--
compare
8.79
KB
-rw-r--r--
compgen
1.43
KB
-rw-r--r--
complete
1.43
KB
-rw-r--r--
composite
8.79
KB
-rw-r--r--
config_list
580
B
-rw-r--r--
configure
1.16
KB
-rw-r--r--
conjure
8.79
KB
-rw-r--r--
convert
8.79
KB
-rw-r--r--
cowsay
543
B
-rw-r--r--
cowthink
543
B
-rw-r--r--
cpan2dist
1.19
KB
-rw-r--r--
cpio
2.85
KB
-rw-r--r--
cppcheck
2.54
KB
-rw-r--r--
createdb
4.19
KB
-rw-r--r--
createuser
4.19
KB
-rw-r--r--
crontab
1.16
KB
-rw-r--r--
cryptdisks
1.18
KB
-rw-r--r--
cryptsetup
2.91
KB
-rw-r--r--
ctrlaltdel
335
B
-rw-r--r--
curl
3.08
KB
-rw-r--r--
cvs
11.71
KB
-rw-r--r--
cvsps
1.45
KB
-rw-r--r--
dcop
379
B
-rw-r--r--
dd
1.26
KB
-rw-r--r--
debconf
294
B
-rw-r--r--
debconf-show
294
B
-rw-r--r--
declare
1.25
KB
-rw-r--r--
deja-dup
681
B
-rw-r--r--
delpart
526
B
-rw-r--r--
desktop-file-validate
472
B
-rw-r--r--
dfutool
9.45
KB
-rw-r--r--
dhclient
696
B
-rw-r--r--
dict
1.76
KB
-rw-r--r--
display
8.79
KB
-rw-r--r--
dmesg
1.15
KB
-rw-r--r--
dmypy
1.05
KB
-rw-r--r--
dnssec-keygen
1.13
KB
-rw-r--r--
dnsspoof
500
B
-rw-r--r--
docker
111.88
KB
-rw-r--r--
dot
1.25
KB
-rw-r--r--
dpkg
3.97
KB
-rw-r--r--
dpkg-deb
3.97
KB
-rw-r--r--
dpkg-query
3.97
KB
-rw-r--r--
dpkg-reconfigure
3.97
KB
-rw-r--r--
dpkg-source
3.25
KB
-rw-r--r--
dropdb
4.19
KB
-rw-r--r--
dropuser
4.19
KB
-rw-r--r--
dselect
615
B
-rw-r--r--
dsniff
512
B
-rw-r--r--
dumpdb
371
B
-rw-r--r--
dumpe2fs
518
B
-rw-r--r--
e2freefrag
458
B
-rw-r--r--
e2label
292
B
-rw-r--r--
eatmydata
31
B
-rw-r--r--
ebtables
3.53
KB
-rw-r--r--
ecryptfs-migrate-home
497
B
-rw-r--r--
edquota
3.58
KB
-rw-r--r--
eog
634
B
-rw-r--r--
ether-wake
537
B
-rw-r--r--
etherwake
537
B
-rw-r--r--
ethtool
23.46
KB
-rw-r--r--
evince
935
B
-rw-r--r--
explodepkg
152
B
-rw-r--r--
export
1.56
KB
-rw-r--r--
f77
2.58
KB
-rw-r--r--
f95
2.58
KB
-rw-r--r--
faillog
629
B
-rw-r--r--
fallocate
721
B
-rw-r--r--
fbgs
1.52
KB
-rw-r--r--
fbi
1.77
KB
-rw-r--r--
fdformat
566
B
-rw-r--r--
fdisk
1.79
KB
-rw-r--r--
feh
4.04
KB
-rw-r--r--
file
743
B
-rw-r--r--
file-roller
1.07
KB
-rw-r--r--
filebucket
9.51
KB
-rw-r--r--
filefrag
350
B
-rw-r--r--
filesnarf
447
B
-rw-r--r--
fincore
916
B
-rw-r--r--
find
3.81
KB
-rw-r--r--
find_member
535
B
-rw-r--r--
findfs
695
B
-rw-r--r--
findmnt
3.12
KB
-rw-r--r--
fio
2.31
KB
-rw-r--r--
firefox
1.14
KB
-rw-r--r--
flake8
987
B
-rw-r--r--
flock
874
B
-rw-r--r--
freebsd-update
587
B
-rw-r--r--
freeciv
1.02
KB
-rw-r--r--
freeciv-gtk2
1.02
KB
-rw-r--r--
freeciv-gtk3
1.02
KB
-rw-r--r--
freeciv-sdl
1.02
KB
-rw-r--r--
freeciv-server
473
B
-rw-r--r--
freeciv-xaw
1.02
KB
-rw-r--r--
fsck
787
B
-rw-r--r--
fsck.cramfs
684
B
-rw-r--r--
fsck.minix
383
B
-rw-r--r--
fsfreeze
524
B
-rw-r--r--
fstrim
715
B
-rw-r--r--
function
1.25
KB
-rw-r--r--
fusermount
640
B
-rw-r--r--
fwupdagent
610
B
-rw-r--r--
fwupdmgr
3.65
KB
-rw-r--r--
fwupdtool
3.26
KB
-rw-r--r--
g++
2.58
KB
-rw-r--r--
g++-5
2.58
KB
-rw-r--r--
g++-6
2.58
KB
-rw-r--r--
g++-7
2.58
KB
-rw-r--r--
g++-8
2.58
KB
-rw-r--r--
g4
1.44
KB
-rw-r--r--
g77
2.58
KB
-rw-r--r--
g95
2.58
KB
-rw-r--r--
gapplication
1.36
KB
-rw-r--r--
gcc
2.58
KB
-rw-r--r--
gcc-5
2.58
KB
-rw-r--r--
gcc-6
2.58
KB
-rw-r--r--
gcc-7
2.58
KB
-rw-r--r--
gcc-8
2.58
KB
-rw-r--r--
gccgo
2.58
KB
-rw-r--r--
gccgo-5
2.58
KB
-rw-r--r--
gccgo-6
2.58
KB
-rw-r--r--
gccgo-7
2.58
KB
-rw-r--r--
gccgo-8
2.58
KB
-rw-r--r--
gcj
2.58
KB
-rw-r--r--
gcl
615
B
-rw-r--r--
gdb
1.6
KB
-rw-r--r--
gdbus
935
B
-rw-r--r--
genaliases
322
B
-rw-r--r--
gendiff
267
B
-rw-r--r--
genisoimage
861
B
-rw-r--r--
geoiplookup
677
B
-rw-r--r--
geoiplookup6
677
B
-rw-r--r--
getconf
798
B
-rw-r--r--
getent
1.92
KB
-rw-r--r--
getopt
815
B
-rw-r--r--
gfortran
2.58
KB
-rw-r--r--
gfortran-5
2.58
KB
-rw-r--r--
gfortran-6
2.58
KB
-rw-r--r--
gfortran-7
2.58
KB
-rw-r--r--
gfortran-8
2.58
KB
-rw-r--r--
gio
3.67
KB
-rw-r--r--
git
68.43
KB
-rw-r--r--
gitk
68.43
KB
-rw-r--r--
gkrellm
915
B
-rw-r--r--
gkrellm2
915
B
-rw-r--r--
gm
854
B
-rw-r--r--
gmake
6.02
KB
-rw-r--r--
gmplayer
11.02
KB
-rw-r--r--
gnatmake
1015
B
-rw-r--r--
gnokii
6.76
KB
-rw-r--r--
gnome-mplayer
940
B
-rw-r--r--
gnome-screenshot
793
B
-rw-r--r--
gnumake
6.02
KB
-rw-r--r--
google-chrome
1.37
KB
-rw-r--r--
google-chrome-stable
1.37
KB
-rw-r--r--
gpasswd
598
B
-rw-r--r--
gpc
2.58
KB
-rw-r--r--
gpg
1.24
KB
-rw-r--r--
gpg2
1.3
KB
-rw-r--r--
gpgv
1.09
KB
-rw-r--r--
gpgv2
1.09
KB
-rw-r--r--
gphoto2
1.36
KB
-rw-r--r--
gprof
1.27
KB
-rw-r--r--
gresource
1.32
KB
-rw-r--r--
groupadd
610
B
-rw-r--r--
groupdel
536
B
-rw-r--r--
groupmems
603
B
-rw-r--r--
groupmod
681
B
-rw-r--r--
growisofs
888
B
-rw-r--r--
grpck
496
B
-rw-r--r--
grub
10.39
KB
-rw-r--r--
grub-bios-setup
10.39
KB
-rw-r--r--
grub-editenv
10.39
KB
-rw-r--r--
grub-install
10.39
KB
-rw-r--r--
grub-mkconfig
10.39
KB
-rw-r--r--
grub-mkfont
10.39
KB
-rw-r--r--
grub-mkimage
10.39
KB
-rw-r--r--
grub-mkpasswd-pbkdf2
10.39
KB
-rw-r--r--
grub-mkrescue
10.39
KB
-rw-r--r--
grub-probe
10.39
KB
-rw-r--r--
grub-reboot
10.39
KB
-rw-r--r--
grub-script-check
10.39
KB
-rw-r--r--
grub-set-default
10.39
KB
-rw-r--r--
gsettings
2.76
KB
-rw-r--r--
gssdp-discover
866
B
-rw-r--r--
gtar
18.47
KB
-rw-r--r--
gzip
1.14
KB
-rw-r--r--
hciattach
9.45
KB
-rw-r--r--
hciconfig
9.45
KB
-rw-r--r--
hcitool
9.45
KB
-rw-r--r--
hd
669
B
-rw-r--r--
hddtemp
871
B
-rw-r--r--
hid2hci
348
B
-rw-r--r--
host
1.96
KB
-rw-r--r--
hostname
485
B
-rw-r--r--
hostnamectl
2.02
KB
-rw-r--r--
hping
786
B
-rw-r--r--
hping2
786
B
-rw-r--r--
hping3
786
B
-rw-r--r--
htop
802
B
-rw-r--r--
htpasswd
912
B
-rw-r--r--
hunspell
1
KB
-rw-r--r--
hwclock
960
B
-rw-r--r--
iceweasel
1.14
KB
-rw-r--r--
iconv
904
B
-rw-r--r--
id
435
B
-rw-r--r--
identify
8.79
KB
-rw-r--r--
idn
657
B
-rw-r--r--
ifdown
898
B
-rw-r--r--
ifquery
898
B
-rw-r--r--
ifstat
1.93
KB
-rw-r--r--
ifstatus
898
B
-rw-r--r--
iftop
504
B
-rw-r--r--
ifup
898
B
-rw-r--r--
import
8.79
KB
-rw-r--r--
influx
824
B
-rw-r--r--
info
1.88
KB
-rw-r--r--
inject
508
B
-rw-r--r--
inotifywait
1.23
KB
-rw-r--r--
inotifywatch
1.23
KB
-rw-r--r--
insmod
517
B
-rw-r--r--
insmod.static
517
B
-rw-r--r--
installpkg
733
B
-rw-r--r--
interdiff
763
B
-rw-r--r--
invoke-rc.d
1.19
KB
-rw-r--r--
ionice
1.13
KB
-rw-r--r--
ip
10.25
KB
-rw-r--r--
ipcmk
576
B
-rw-r--r--
ipcrm
1.39
KB
-rw-r--r--
ipcs
514
B
-rw-r--r--
iperf
1.98
KB
-rw-r--r--
iperf3
1.98
KB
-rw-r--r--
ipmitool
5.61
KB
-rw-r--r--
ipsec
3.1
KB
-rw-r--r--
iptables
1.84
KB
-rw-r--r--
ipv6calc
1
KB
-rw-r--r--
iscsiadm
1.87
KB
-rw-r--r--
isort
1.24
KB
-rw-r--r--
isosize
529
B
-rw-r--r--
isql
352
B
-rw-r--r--
iwconfig
2.73
KB
-rw-r--r--
iwlist
613
B
-rw-r--r--
iwpriv
735
B
-rw-r--r--
iwspy
484
B
-rw-r--r--
jar
499
B
-rw-r--r--
jarsigner
1.61
KB
-rw-r--r--
java
8.71
KB
-rw-r--r--
javac
8.71
KB
-rw-r--r--
javadoc
8.71
KB
-rw-r--r--
javaws
770
B
-rw-r--r--
journalctl
5.87
KB
-rw-r--r--
jpegoptim
878
B
-rw-r--r--
jps
595
B
-rw-r--r--
jq
1.17
KB
-rw-r--r--
jshint
886
B
-rw-r--r--
json_xs
865
B
-rw-r--r--
jsonschema
635
B
-rw-r--r--
k3b
1.13
KB
-rw-r--r--
kcov
1.72
KB
-rw-r--r--
kernel-install
1.64
KB
-rw-r--r--
kill
577
B
-rw-r--r--
killall
774
B
-rw-r--r--
kldload
475
B
-rw-r--r--
kldunload
372
B
-rw-r--r--
kmod
3.16
KB
-rw-r--r--
koji
6.17
KB
-rw-r--r--
kplayer
11.02
KB
-rw-r--r--
ktutil
2.93
KB
-rw-r--r--
l2ping
9.45
KB
-rw-r--r--
larch
1.93
KB
-rw-r--r--
last
949
B
-rw-r--r--
lastlog
573
B
-rw-r--r--
lbzip2
1.06
KB
-rw-r--r--
ldapadd
4.36
KB
-rw-r--r--
ldapcompare
4.36
KB
-rw-r--r--
ldapdelete
4.36
KB
-rw-r--r--
ldapmodify
4.36
KB
-rw-r--r--
ldapmodrdn
4.36
KB
-rw-r--r--
ldappasswd
4.36
KB
-rw-r--r--
ldapsearch
4.36
KB
-rw-r--r--
ldapvi
1.35
KB
-rw-r--r--
ldapwhoami
4.36
KB
-rw-r--r--
ldattach
1.44
KB
-rw-r--r--
lftp
683
B
-rw-r--r--
lftpget
306
B
-rw-r--r--
lilo
1.16
KB
-rw-r--r--
links
3.1
KB
-rw-r--r--
links2
3.1
KB
-rw-r--r--
lintian
5.25
KB
-rw-r--r--
lintian-info
5.25
KB
-rw-r--r--
lisp
633
B
-rw-r--r--
list_admins
385
B
-rw-r--r--
list_lists
465
B
-rw-r--r--
list_members
852
B
-rw-r--r--
list_owners
411
B
-rw-r--r--
locale-gen
710
B
-rw-r--r--
localectl
3.24
KB
-rw-r--r--
logger
1.52
KB
-rw-r--r--
loginctl
3.97
KB
-rw-r--r--
losetup
1.7
KB
-rw-r--r--
lpq
594
B
-rw-r--r--
lpr
904
B
-rw-r--r--
lrzip
1.09
KB
-rw-r--r--
lsblk
1.98
KB
-rw-r--r--
lscpu
1.04
KB
-rw-r--r--
lsipc
1.28
KB
-rw-r--r--
lslocks
1.06
KB
-rw-r--r--
lslogins
1.69
KB
-rw-r--r--
lsmem
1.04
KB
-rw-r--r--
lsns
1.16
KB
-rw-r--r--
lsof
1.35
KB
-rw-r--r--
lsscsi
583
B
-rw-r--r--
lsusb
417
B
-rw-r--r--
lua
430
B
-rw-r--r--
luac
482
B
-rw-r--r--
luseradd
1011
B
-rw-r--r--
luserdel
475
B
-rw-r--r--
lusermod
1011
B
-rw-r--r--
lvchange
18.9
KB
-rw-r--r--
lvcreate
18.9
KB
-rw-r--r--
lvdisplay
18.9
KB
-rw-r--r--
lvextend
18.9
KB
-rw-r--r--
lvm
18.9
KB
-rw-r--r--
lvmdiskscan
18.9
KB
-rw-r--r--
lvreduce
18.9
KB
-rw-r--r--
lvremove
18.9
KB
-rw-r--r--
lvrename
18.9
KB
-rw-r--r--
lvresize
18.9
KB
-rw-r--r--
lvs
18.9
KB
-rw-r--r--
lvscan
18.9
KB
-rw-r--r--
lz4
1.15
KB
-rw-r--r--
lz4c
1.15
KB
-rw-r--r--
lzip
1.1
KB
-rw-r--r--
lzma
926
B
-rw-r--r--
lzop
1.45
KB
-rw-r--r--
macof
425
B
-rw-r--r--
mailmanctl
465
B
-rw-r--r--
mailsnarf
447
B
-rw-r--r--
make
6.02
KB
-rw-r--r--
makepkg
1.02
KB
-rw-r--r--
man
2.8
KB
-rw-r--r--
mc
668
B
-rw-r--r--
mcookie
599
B
-rw-r--r--
mcrypt
1.82
KB
-rw-r--r--
mdadm
4.41
KB
-rw-r--r--
mdecrypt
1.82
KB
-rw-r--r--
mdtool
2.06
KB
-rw-r--r--
medusa
676
B
-rw-r--r--
mencoder
11.02
KB
-rw-r--r--
mesg
412
B
-rw-r--r--
micropython
1.72
KB
-rw-r--r--
mii-diag
651
B
-rw-r--r--
mii-tool
849
B
-rw-r--r--
minicom
1.07
KB
-rw-r--r--
mkfs
638
B
-rw-r--r--
mkfs.bfs
656
B
-rw-r--r--
mkfs.cramfs
821
B
-rw-r--r--
mkfs.minix
714
B
-rw-r--r--
mkinitrd
1.19
KB
-rw-r--r--
mkisofs
861
B
-rw-r--r--
mkswap
841
B
-rw-r--r--
mktemp
670
B
-rw-r--r--
mmcli
5.41
KB
-rw-r--r--
mmsitepass
328
B
-rw-r--r--
modinfo
1.2
KB
-rw-r--r--
modprobe
3.97
KB
-rw-r--r--
mogrify
8.79
KB
-rw-r--r--
monodevelop
442
B
-rw-r--r--
montage
8.79
KB
-rw-r--r--
more
528
B
-rw-r--r--
mount
2.05
KB
-rw-r--r--
mountpoint
487
B
-rw-r--r--
mozilla-firefox
1.14
KB
-rw-r--r--
mplayer
11.02
KB
-rw-r--r--
mplayer2
11.02
KB
-rw-r--r--
mr
2.46
KB
-rw-r--r--
msgsnarf
447
B
-rw-r--r--
msynctool
1.31
KB
-rw-r--r--
mtr
1.88
KB
-rw-r--r--
mtx
1.15
KB
-rw-r--r--
munin-node-configure
752
B
-rw-r--r--
munin-run
643
B
-rw-r--r--
munin-update
652
B
-rw-r--r--
munindoc
318
B
-rw-r--r--
mussh
1.15
KB
-rw-r--r--
mutt
4.19
KB
-rw-r--r--
muttng
4.19
KB
-rw-r--r--
mypy
1.38
KB
-rw-r--r--
mysql
2.55
KB
-rw-r--r--
mysqladmin
1.69
KB
-rw-r--r--
namei
500
B
-rw-r--r--
nc
1.21
KB
-rw-r--r--
ncal
926
B
-rw-r--r--
ncftp
621
B
-rw-r--r--
nethogs
558
B
-rw-r--r--
netplan
988
B
-rw-r--r--
networkctl
2.08
KB
-rw-r--r--
newlist
571
B
-rw-r--r--
newusers
653
B
-rw-r--r--
ngrep
837
B
-rw-r--r--
nmap
1.81
KB
-rw-r--r--
npm
1.73
KB
-rw-r--r--
nproc
490
B
-rw-r--r--
nsenter
1.14
KB
-rw-r--r--
nslookup
1.96
KB
-rw-r--r--
nsupdate
898
B
-rw-r--r--
ntpdate
715
B
-rw-r--r--
oggdec
861
B
-rw-r--r--
op
1.41
KB
-rw-r--r--
openssl
11.18
KB
-rw-r--r--
opera
1.35
KB
-rw-r--r--
optipng
1.15
KB
-rw-r--r--
p4
1.44
KB
-rw-r--r--
pack200
2.16
KB
-rw-r--r--
partx
1.24
KB
-rw-r--r--
passwd
539
B
-rw-r--r--
patch
1.72
KB
-rw-r--r--
pbzip2
1.06
KB
-rw-r--r--
pccardctl
380
B
-rw-r--r--
pdftotext
920
B
-rw-r--r--
pdlzip
1.1
KB
-rw-r--r--
perl
4.19
KB
-rw-r--r--
perlcritic
1.35
KB
-rw-r--r--
perldoc
4.19
KB
-rw-r--r--
perltidy
1.25
KB
-rw-r--r--
pgrep
1.18
KB
-rw-r--r--
phing
2.71
KB
-rw-r--r--
pidof
520
B
-rw-r--r--
pigz
1.14
KB
-rw-r--r--
pine
873
B
-rw-r--r--
pinfo
1.88
KB
-rw-r--r--
ping
1.96
KB
-rw-r--r--
ping6
1.96
KB
-rw-r--r--
pivot_root
387
B
-rw-r--r--
pkcon
2.67
KB
-rw-r--r--
pkg-config
1.28
KB
-rw-r--r--
pkg-get
2.08
KB
-rw-r--r--
pkg_deinstall
460
B
-rw-r--r--
pkg_delete
460
B
-rw-r--r--
pkg_info
460
B
-rw-r--r--
pkgadd
1.7
KB
-rw-r--r--
pkgrm
1.04
KB
-rw-r--r--
pkgtool
846
B
-rw-r--r--
pkgutil
3.93
KB
-rw-r--r--
pkill
1.18
KB
-rw-r--r--
plague-client
413
B
-rw-r--r--
plzip
1.1
KB
-rw-r--r--
pm-hibernate
319
B
-rw-r--r--
pm-is-supported
334
B
-rw-r--r--
pm-powersave
280
B
-rw-r--r--
pm-suspend
319
B
-rw-r--r--
pm-suspend-hybrid
319
B
-rw-r--r--
pmake
6.02
KB
-rw-r--r--
pngfix
809
B
-rw-r--r--
portinstall
909
B
-rw-r--r--
portsnap
493
B
-rw-r--r--
portupgrade
477
B
-rw-r--r--
postalias
962
B
-rw-r--r--
postcat
880
B
-rw-r--r--
postconf
809
B
-rw-r--r--
postfix
813
B
-rw-r--r--
postmap
962
B
-rw-r--r--
postsuper
1.53
KB
-rw-r--r--
povray
1.93
KB
-rw-r--r--
ppc-koji
6.17
KB
-rw-r--r--
prelink
911
B
-rw-r--r--
prlimit
1.3
KB
-rw-r--r--
pro
1.94
KB
-rw-r--r--
protoc
1.49
KB
-rw-r--r--
psql
4.19
KB
-rw-r--r--
puppet
9.51
KB
-rw-r--r--
puppetca
9.51
KB
-rw-r--r--
puppetd
9.51
KB
-rw-r--r--
puppetdoc
9.51
KB
-rw-r--r--
puppetmasterd
9.51
KB
-rw-r--r--
puppetqd
9.51
KB
-rw-r--r--
puppetrun
9.51
KB
-rw-r--r--
pv
721
B
-rw-r--r--
pvchange
18.9
KB
-rw-r--r--
pvcreate
18.9
KB
-rw-r--r--
pvdisplay
18.9
KB
-rw-r--r--
pvmove
18.9
KB
-rw-r--r--
pvremove
18.9
KB
-rw-r--r--
pvs
18.9
KB
-rw-r--r--
pvscan
18.9
KB
-rw-r--r--
pwck
386
B
-rw-r--r--
pwd
445
B
-rw-r--r--
pwdx
481
B
-rw-r--r--
pwgen
592
B
-rw-r--r--
pxz
1.45
KB
-rw-r--r--
py.test
2.3
KB
-rw-r--r--
py.test-2
2.3
KB
-rw-r--r--
py.test-3
2.3
KB
-rw-r--r--
pycodestyle
726
B
-rw-r--r--
pydoc
1.01
KB
-rw-r--r--
pydoc3
1.01
KB
-rw-r--r--
pydocstyle
818
B
-rw-r--r--
pyflakes
441
B
-rw-r--r--
pylint
3.06
KB
-rw-r--r--
pylint-2
3.06
KB
-rw-r--r--
pylint-3
3.06
KB
-rw-r--r--
pypy
1.72
KB
-rw-r--r--
pypy3
1.72
KB
-rw-r--r--
pytest
2.3
KB
-rw-r--r--
pytest-2
2.3
KB
-rw-r--r--
pytest-3
2.3
KB
-rw-r--r--
python
1.72
KB
-rw-r--r--
python2
1.72
KB
-rw-r--r--
python3
1.72
KB
-rw-r--r--
pyvenv
428
B
-rw-r--r--
pyvenv-3.4
428
B
-rw-r--r--
pyvenv-3.5
428
B
-rw-r--r--
pyvenv-3.6
428
B
-rw-r--r--
pyvenv-3.7
428
B
-rw-r--r--
pyvenv-3.8
428
B
-rw-r--r--
qdbus
379
B
-rw-r--r--
qemu
3.24
KB
-rw-r--r--
qemu-kvm
3.24
KB
-rw-r--r--
qemu-system-i386
3.24
KB
-rw-r--r--
qemu-system-x86_64
3.24
KB
-rw-r--r--
qrunner
391
B
-rw-r--r--
querybts
1.22
KB
-rw-r--r--
quota
3.58
KB
-rw-r--r--
quotacheck
3.58
KB
-rw-r--r--
quotaoff
3.58
KB
-rw-r--r--
quotaon
3.58
KB
-rw-r--r--
radvdump
492
B
-rw-r--r--
ralsh
9.51
KB
-rw-r--r--
raw
482
B
-rw-r--r--
rcs
890
B
-rw-r--r--
rcsdiff
890
B
-rw-r--r--
rdesktop
1.63
KB
-rw-r--r--
rdict
1.76
KB
-rw-r--r--
readprofile
679
B
-rw-r--r--
remove_members
569
B
-rw-r--r--
removepkg
550
B
-rw-r--r--
renice
784
B
-rw-r--r--
reportbug
3.24
KB
-rw-r--r--
repquota
3.58
KB
-rw-r--r--
resizepart
568
B
-rw-r--r--
resolvconf
426
B
-rw-r--r--
resolvectl
5.56
KB
-rw-r--r--
rev
432
B
-rw-r--r--
rfcomm
9.45
KB
-rw-r--r--
ri
3.66
KB
-rw-r--r--
rlog
890
B
-rw-r--r--
rmlist
363
B
-rw-r--r--
rmmod
519
B
-rw-r--r--
route
790
B
-rw-r--r--
rpcdebug
981
B
-rw-r--r--
rpm
10.08
KB
-rw-r--r--
rpm2targz
368
B
-rw-r--r--
rpm2tgz
368
B
-rw-r--r--
rpm2txz
368
B
-rw-r--r--
rpmbuild
10.08
KB
-rw-r--r--
rpmbuild-md5
10.08
KB
-rw-r--r--
rpmcheck
512
B
-rw-r--r--
rrdtool
438
B
-rw-r--r--
rsync
3.44
KB
-rw-r--r--
rtcwake
1.06
KB
-rw-r--r--
s390-koji
6.17
KB
-rw-r--r--
sbcl
675
B
-rw-r--r--
sbcl-mt
675
B
-rw-r--r--
sbopkg
1.71
KB
-rw-r--r--
scp
15.54
KB
-rw-r--r--
screen
2.91
KB
-rw-r--r--
script
775
B
-rw-r--r--
scriptreplay
625
B
-rw-r--r--
scrub
868
B
-rw-r--r--
sdptool
9.45
KB
-rw-r--r--
setarch
790
B
-rw-r--r--
setpriv
2.77
KB
-rw-r--r--
setquota
3.58
KB
-rw-r--r--
setsid
440
B
-rw-r--r--
setterm
2.53
KB
-rw-r--r--
sfdisk
1.96
KB
-rw-r--r--
sftp
15.54
KB
-rw-r--r--
sh
885
B
-rw-r--r--
shellcheck
1.62
KB
-rw-r--r--
sidedoor
15.54
KB
-rw-r--r--
sitecopy
1.29
KB
-rw-r--r--
slackpkg
3.32
KB
-rw-r--r--
slapt-get
2.36
KB
-rw-r--r--
slapt-src
1.84
KB
-rw-r--r--
slogin
15.54
KB
-rw-r--r--
smartctl
4.18
KB
-rw-r--r--
smbcacls
6.92
KB
-rw-r--r--
smbclient
6.92
KB
-rw-r--r--
smbcquotas
6.92
KB
-rw-r--r--
smbget
6.92
KB
-rw-r--r--
smbpasswd
6.92
KB
-rw-r--r--
smbtar
6.92
KB
-rw-r--r--
smbtree
6.92
KB
-rw-r--r--
snap
2.48
KB
-rw-r--r--
snownews
363
B
-rw-r--r--
sparc-koji
6.17
KB
-rw-r--r--
spovray
1.93
KB
-rw-r--r--
sqlite3
882
B
-rw-r--r--
ss
1.09
KB
-rw-r--r--
ssh
15.54
KB
-rw-r--r--
ssh-add
677
B
-rw-r--r--
ssh-copy-id
684
B
-rw-r--r--
ssh-keygen
1.84
KB
-rw-r--r--
sshfs
594
B
-rw-r--r--
sshmitm
364
B
-rw-r--r--
sshow
498
B
-rw-r--r--
star
18.47
KB
-rw-r--r--
strace
3.26
KB
-rw-r--r--
stream
8.79
KB
-rw-r--r--
strings
1.12
KB
-rw-r--r--
su
892
B
-rw-r--r--
sudo
1.41
KB
-rw-r--r--
sudoedit
1.41
KB
-rw-r--r--
svcadm
4.95
KB
-rw-r--r--
svk
8.56
KB
-rw-r--r--
swaplabel
635
B
-rw-r--r--
swapoff
743
B
-rw-r--r--
swapon
1.96
KB
-rw-r--r--
sync_members
730
B
-rw-r--r--
synclient
588
B
-rw-r--r--
sysbench
3.96
KB
-rw-r--r--
sysctl
802
B
-rw-r--r--
systemctl
13.26
KB
-rw-r--r--
systemd-analyze
5.2
KB
-rw-r--r--
systemd-cat
1.66
KB
-rw-r--r--
systemd-cgls
2.04
KB
-rw-r--r--
systemd-cgtop
1.84
KB
-rw-r--r--
systemd-delta
1.7
KB
-rw-r--r--
systemd-detect-virt
1.28
KB
-rw-r--r--
systemd-path
1.68
KB
-rw-r--r--
systemd-resolve
2.63
KB
-rw-r--r--
systemd-run
5.23
KB
-rw-r--r--
tar
18.47
KB
-rw-r--r--
taskset
1.18
KB
-rw-r--r--
tc
26.49
KB
-rw-r--r--
tcpdump
1.62
KB
-rw-r--r--
tcpkill
440
B
-rw-r--r--
tcpnice
431
B
-rw-r--r--
tightvncviewer
2.94
KB
-rw-r--r--
timedatectl
2.86
KB
-rw-r--r--
timeout
993
B
-rw-r--r--
tipc
7.15
KB
-rw-r--r--
tox
1.33
KB
-rw-r--r--
tracepath
559
B
-rw-r--r--
tracepath6
559
B
-rw-r--r--
tshark
4.18
KB
-rw-r--r--
tune2fs
1.72
KB
-rw-r--r--
typeset
1.25
KB
-rw-r--r--
ua
1.94
KB
-rw-r--r--
udevadm
7.96
KB
-rw-r--r--
udisksctl
857
B
-rw-r--r--
ufw
2.44
KB
-rw-r--r--
ulimit
901
B
-rw-r--r--
umount
2.2
KB
-rw-r--r--
unace
476
B
-rw-r--r--
unpack200
1.22
KB
-rw-r--r--
unrar
619
B
-rw-r--r--
unshare
855
B
-rw-r--r--
unshunt
347
B
-rw-r--r--
update-alternatives
2.35
KB
-rw-r--r--
update-initramfs
581
B
-rw-r--r--
update-rc.d
1.92
KB
-rw-r--r--
upgradepkg
805
B
-rw-r--r--
urlsnarf
507
B
-rw-r--r--
useradd
1.22
KB
-rw-r--r--
userdel
543
B
-rw-r--r--
usermod
1.33
KB
-rw-r--r--
utmpdump
475
B
-rw-r--r--
uuidd
862
B
-rw-r--r--
uuidgen
657
B
-rw-r--r--
uuidparse
727
B
-rw-r--r--
valgrind
3.43
KB
-rw-r--r--
vgcfgbackup
18.9
KB
-rw-r--r--
vgcfgrestore
18.9
KB
-rw-r--r--
vgchange
18.9
KB
-rw-r--r--
vgck
18.9
KB
-rw-r--r--
vgconvert
18.9
KB
-rw-r--r--
vgcreate
18.9
KB
-rw-r--r--
vgdisplay
18.9
KB
-rw-r--r--
vgexport
18.9
KB
-rw-r--r--
vgextend
18.9
KB
-rw-r--r--
vgimport
18.9
KB
-rw-r--r--
vgmerge
18.9
KB
-rw-r--r--
vgmknodes
18.9
KB
-rw-r--r--
vgreduce
18.9
KB
-rw-r--r--
vgremove
18.9
KB
-rw-r--r--
vgrename
18.9
KB
-rw-r--r--
vgs
18.9
KB
-rw-r--r--
vgscan
18.9
KB
-rw-r--r--
vgsplit
18.9
KB
-rw-r--r--
vigr
438
B
-rw-r--r--
vipw
438
B
-rw-r--r--
vmstat
696
B
-rw-r--r--
vncviewer
2.94
KB
-rw-r--r--
vpnc
2.25
KB
-rw-r--r--
wall
634
B
-rw-r--r--
watch
1.15
KB
-rw-r--r--
wdctl
1.34
KB
-rw-r--r--
webmitm
364
B
-rw-r--r--
wget
6.34
KB
-rw-r--r--
whatis
2.8
KB
-rw-r--r--
whereis
535
B
-rw-r--r--
whiptail
345
B
-rw-r--r--
wine
536
B
-rw-r--r--
wine-development
536
B
-rw-r--r--
wine-stable
536
B
-rw-r--r--
wipefs
1.16
KB
-rw-r--r--
withlist
411
B
-rw-r--r--
wodim
3.49
KB
-rw-r--r--
wol
1.12
KB
-rw-r--r--
wsimport
1.09
KB
-rw-r--r--
wtf
926
B
-rw-r--r--
wvdial
1.24
KB
-rw-r--r--
xdg-mime
2.21
KB
-rw-r--r--
xdg-settings
761
B
-rw-r--r--
xfreerdp
2.07
KB
-rw-r--r--
xgamma
1.99
KB
-rw-r--r--
xhost
376
B
-rw-r--r--
xmllint
1.23
KB
-rw-r--r--
xmlwf
696
B
-rw-r--r--
xmms
687
B
-rw-r--r--
xmodmap
435
B
-rw-r--r--
xpovray
1.93
KB
-rw-r--r--
xrandr
2.13
KB
-rw-r--r--
xrdb
506
B
-rw-r--r--
xsltproc
1.19
KB
-rw-r--r--
xvfb-run
871
B
-rw-r--r--
xvnc4viewer
2.94
KB
-rw-r--r--
xxd
467
B
-rw-r--r--
xz
1.45
KB
-rw-r--r--
xzdec
630
B
-rw-r--r--
ypcat
759
B
-rw-r--r--
ypmatch
759
B
-rw-r--r--
yum-arch
357
B
-rw-r--r--
zopfli
676
B
-rw-r--r--
zopflipng
926
B
-rw-r--r--
zramctl
1.26
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : docker
#!/usr/bin/env bash # shellcheck disable=SC2016,SC2119,SC2155,SC2206,SC2207,SC2254 # # Shellcheck ignore list: # - SC2016: Expressions don't expand in single quotes, use double quotes for that. # - SC2119: Use foo "$@" if function's $1 should mean script's $1. # - SC2155: Declare and assign separately to avoid masking return values. # - SC2206: Quote to prevent word splitting, or split robustly with mapfile or read -a. # - SC2207: Prefer mapfile or read -a to split command output (or quote to avoid splitting). # - SC2254: Quote expansions in case patterns to match literally rather than as a glob. # # You can find more details for each warning at the following page: # https://github.com/koalaman/shellcheck/wiki/<SCXXXX> # # bash completion file for core docker commands # # This script provides completion of: # - commands and their options # - container ids and names # - image repos and tags # - filepaths # # To enable the completions either: # - place this file in /etc/bash_completion.d # or # - 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 # # Configuration: # # For several commands, the amount of completions can be configured by # setting environment variables. # # DOCKER_COMPLETION_SHOW_CONFIG_IDS # DOCKER_COMPLETION_SHOW_CONTAINER_IDS # DOCKER_COMPLETION_SHOW_NETWORK_IDS # DOCKER_COMPLETION_SHOW_NODE_IDS # DOCKER_COMPLETION_SHOW_PLUGIN_IDS # DOCKER_COMPLETION_SHOW_SECRET_IDS # DOCKER_COMPLETION_SHOW_SERVICE_IDS # "no" - Show names only (default) # "yes" - Show names and ids # # You can tailor completion for the "events", "history", "inspect", "run", # "rmi" and "save" commands by setting the following environment # variables: # # DOCKER_COMPLETION_SHOW_IMAGE_IDS # "none" - Show names only (default) # "non-intermediate" - Show names and ids, but omit intermediate image IDs # "all" - Show names and ids, including intermediate image IDs # # DOCKER_COMPLETION_SHOW_TAGS # "yes" - include tags in completion options (default) # "no" - don't include tags in completion options # # 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 # # Note for developers: # Arrange options sorted alphabetically by long name with the short # options immediately following their corresponding long form. # This order should be applied to lists, alternatives and code blocks. __docker_previous_extglob_setting=$(shopt -p extglob) shopt -s extglob __docker_q() { docker ${host:+--host "$host"} ${config:+--config "$config"} ${context:+--context "$context"} 2>/dev/null "$@" } # __docker_configs returns a list of configs. Additional options to # `docker config ls` may be specified in order to filter the list, e.g. # `__docker_configs --filter label=stage=production`. # By default, only names are returned. # Set DOCKER_COMPLETION_SHOW_CONFIG_IDS=yes to also complete IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. __docker_configs() { local format if [ "${1-}" = "--id" ] ; then format='{{.ID}}' shift elif [ "${1-}" = "--name" ] ; then format='{{.Name}}' shift elif [ "${DOCKER_COMPLETION_SHOW_CONFIG_IDS-}" = yes ] ; then format='{{.ID}} {{.Name}}' else format='{{.Name}}' fi __docker_q config ls --format "$format" "$@" } # __docker_complete_configs applies completion of configs based on the current value # of `$cur` or the value of the optional first option `--cur`, if given. __docker_complete_configs() { local current="$cur" if [ "$1" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_configs "$@")" -- "$current") ) } # __docker_containers returns a list of containers. Additional options to # `docker ps` may be specified in order to filter the list, e.g. # `__docker_containers --filter status=running` # By default, only names are returned. # Set DOCKER_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. __docker_containers() { local format if [ "${1-}" = "--id" ] ; then format='{{.ID}}' shift elif [ "${1-}" = "--name" ] ; then format='{{.Names}}' shift elif [ "${DOCKER_COMPLETION_SHOW_CONTAINER_IDS-}" = yes ] ; then format='{{.ID}} {{.Names}}' else format='{{.Names}}' fi __docker_q ps --format "$format" "$@" } # __docker_complete_containers applies completion of containers based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_containers`. __docker_complete_containers() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_containers "$@")" -- "$current") ) } __docker_complete_containers_all() { __docker_complete_containers "$@" --all } # shellcheck disable=SC2120 __docker_complete_containers_removable() { __docker_complete_containers "$@" --filter status=created --filter status=exited } __docker_complete_containers_running() { __docker_complete_containers "$@" --filter status=running } # shellcheck disable=SC2120 __docker_complete_containers_stoppable() { __docker_complete_containers "$@" --filter status=running --filter status=paused } # shellcheck disable=SC2120 __docker_complete_containers_stopped() { __docker_complete_containers "$@" --filter status=exited } # shellcheck disable=SC2120 __docker_complete_containers_unpauseable() { __docker_complete_containers "$@" --filter status=paused } __docker_complete_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_complete_container_ids() { local containers=( $(__docker_q ps -aq) ) COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") ) } # __docker_contexts returns a list of contexts without the special "default" context. # Completions may be added with `--add`, e.g. `--add default`. __docker_contexts() { local add=() while true ; do case "${1-}" in --add) add+=("$2") shift 2 ;; *) break ;; esac done __docker_q context ls -q echo "${add[@]}" } __docker_complete_contexts() { local contexts=( $(__docker_contexts "$@") ) COMPREPLY=( $(compgen -W "${contexts[*]}" -- "$cur") ) } # __docker_images returns a list of images. For each image, up to three representations # can be generated: the repository (e.g. busybox), repository:tag (e.g. busybox:latest) # and the ID (e.g. sha256:ee22cbbd4ea3dff63c86ba60c7691287c321e93adfc1009604eb1dde7ec88645). # # The optional arguments `--repo`, `--tag` and `--id` select the representations that # may be returned. Whether or not a particular representation is actually returned # depends on the user's customization through several environment variables: # - image IDs are only shown if DOCKER_COMPLETION_SHOW_IMAGE_IDS=all|non-intermediate. # - tags can be excluded by setting DOCKER_COMPLETION_SHOW_TAGS=no. # - repositories are always shown. # # In cases where an exact image specification is needed, `--force-tag` can be used. # It ignores DOCKER_COMPLETION_SHOW_TAGS and only lists valid repository:tag combinations, # avoiding repository names that would default to a potentially missing default tag. # # Additional arguments to `docker image ls` may be specified in order to filter the list, # e.g. `__docker_images --filter dangling=true`. # __docker_images() { local repo_format='{{.Repository}}' local tag_format='{{.Repository}}:{{.Tag}}' local id_format='{{.ID}}' local all local format if [ "${DOCKER_COMPLETION_SHOW_IMAGE_IDS-}" = "all" ] ; then all='--all' fi while true ; do case "${1-}" in --repo) format+="$repo_format\n" shift ;; --tag) if [ "${DOCKER_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then format+="$tag_format\n" fi shift ;; --id) if [[ ${DOCKER_COMPLETION_SHOW_IMAGE_IDS-} =~ ^(all|non-intermediate)$ ]] ; then format+="$id_format\n" fi shift ;; --force-tag) # like `--tag` but ignores environment setting format+="$tag_format\n" shift ;; *) break ;; esac done __docker_q image ls --no-trunc --format "${format%\\n}" ${all-} "$@" | grep -v '<none>$' } # __docker_complete_images applies completion of images based on the current value of `$cur` or # the value of the optional first option `--cur`, if given. # See __docker_images for customization of the returned items. __docker_complete_images() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_images "$@")" -- "$current") ) __ltrim_colon_completions "$current" } # __docker_networks returns a list of all networks. Additional options to # `docker network ls` may be specified in order to filter the list, e.g. # `__docker_networks --filter type=custom` # By default, only names are returned. # Set DOCKER_COMPLETION_SHOW_NETWORK_IDS=yes to also complete IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. __docker_networks() { local format if [ "${1-}" = "--id" ] ; then format='{{.ID}}' shift elif [ "${1-}" = "--name" ] ; then format='{{.Name}}' shift elif [ "${DOCKER_COMPLETION_SHOW_NETWORK_IDS-}" = yes ] ; then format='{{.ID}} {{.Name}}' else format='{{.Name}}' fi __docker_q network ls --format "$format" "$@" } # __docker_complete_networks applies completion of networks based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_networks`. __docker_complete_networks() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_networks "$@")" -- "$current") ) } __docker_complete_containers_in_network() { local containers=($(__docker_q network inspect -f '{{range $i, $c := .Containers}}{{$i}} {{$c.Name}} {{end}}' "$1")) COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") ) } # __docker_volumes returns a list of all volumes. Additional options to # `docker volume ls` may be specified in order to filter the list, e.g. # `__docker_volumes --filter dangling=true` # Because volumes do not have IDs, this function does not distinguish between # IDs and names. __docker_volumes() { __docker_q volume ls -q "$@" } # __docker_complete_volumes applies completion of volumes based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_volumes`. __docker_complete_volumes() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_volumes "$@")" -- "$current") ) } # __docker_plugins_bundled returns a list of all plugins of a given type. # The type has to be specified with the mandatory option `--type`. # Valid types are: Network, Volume, Authorization. # Completions may be added or removed with `--add` and `--remove` # This function only deals with plugins that come bundled with Docker. # For plugins managed by `docker plugin`, see `__docker_plugins_installed`. __docker_plugins_bundled() { local type add=() remove=() while true ; do case "${1-}" in --type) type="$2" shift 2 ;; --add) add+=("$2") shift 2 ;; --remove) remove+=("$2") shift 2 ;; *) break ;; esac done local plugins=($(__docker_q info --format "{{range \$i, \$p := .Plugins.$type}}{{.}} {{end}}")) for del in "${remove[@]}" ; do plugins=(${plugins[@]/$del/}) done echo "${plugins[@]}" "${add[@]}" } # __docker_complete_plugins_bundled applies completion of plugins based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # The plugin type has to be specified with the next option `--type`. # This function only deals with plugins that come bundled with Docker. # For completion of plugins managed by `docker plugin`, see # `__docker_complete_plugins_installed`. __docker_complete_plugins_bundled() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_plugins_bundled "$@")" -- "$current") ) } # __docker_plugins_installed returns a list of all plugins that were installed with # the Docker plugin API. # By default, only names are returned. # Set DOCKER_COMPLETION_SHOW_PLUGIN_IDS=yes to also complete IDs. # Additional options to `docker plugin ls` may be specified in order to filter the list, # e.g. `__docker_plugins_installed --filter enabled=true` # For built-in pugins, see `__docker_plugins_bundled`. __docker_plugins_installed() { local format if [ "${DOCKER_COMPLETION_SHOW_PLUGIN_IDS-}" = yes ] ; then format='{{.ID}} {{.Name}}' else format='{{.Name}}' fi __docker_q plugin ls --format "$format" "$@" } # __docker_complete_plugins_installed applies completion of plugins that were installed # with the Docker plugin API, based on the current value of `$cur` or the value of # the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_plugins_installed`. # For completion of built-in pugins, see `__docker_complete_plugins_bundled`. __docker_complete_plugins_installed() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_plugins_installed "$@")" -- "$current") ) } __docker_runtimes() { __docker_q info | sed -n 's/^Runtimes: \(.*\)/\1/p' } __docker_complete_runtimes() { COMPREPLY=( $(compgen -W "$(__docker_runtimes)" -- "$cur") ) } # __docker_secrets returns a list of secrets. Additional options to # `docker secret ls` may be specified in order to filter the list, e.g. # `__docker_secrets --filter label=stage=production` # By default, only names are returned. # Set DOCKER_COMPLETION_SHOW_SECRET_IDS=yes to also complete IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. __docker_secrets() { local format if [ "${1-}" = "--id" ] ; then format='{{.ID}}' shift elif [ "${1-}" = "--name" ] ; then format='{{.Name}}' shift elif [ "${DOCKER_COMPLETION_SHOW_SECRET_IDS-}" = yes ] ; then format='{{.ID}} {{.Name}}' else format='{{.Name}}' fi __docker_q secret ls --format "$format" "$@" } # __docker_complete_secrets applies completion of secrets based on the current value # of `$cur` or the value of the optional first option `--cur`, if given. __docker_complete_secrets() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_secrets "$@")" -- "$current") ) } # __docker_stacks returns a list of all stacks. __docker_stacks() { __docker_q stack ls | awk 'NR>1 {print $1}' } # __docker_complete_stacks applies completion of stacks based on the current value # of `$cur` or the value of the optional first option `--cur`, if given. __docker_complete_stacks() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_stacks "$@")" -- "$current") ) } # __docker_nodes returns a list of all nodes. Additional options to # `docker node ls` may be specified in order to filter the list, e.g. # `__docker_nodes --filter role=manager` # By default, only node names are returned. # Set DOCKER_COMPLETION_SHOW_NODE_IDS=yes to also complete node IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. # Completions may be added with `--add`, e.g. `--add self`. __docker_nodes() { local format if [ "${DOCKER_COMPLETION_SHOW_NODE_IDS-}" = yes ] ; then format='{{.ID}} {{.Hostname}}' else format='{{.Hostname}}' fi local add=() while true ; do case "${1-}" in --id) format='{{.ID}}' shift ;; --name) format='{{.Hostname}}' shift ;; --add) add+=("$2") shift 2 ;; *) break ;; esac done echo "$(__docker_q node ls --format "$format" "$@")" "${add[@]}" } # __docker_complete_nodes applies completion of nodes based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_nodes`. __docker_complete_nodes() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(compgen -W "$(__docker_nodes "$@")" -- "$current") ) } # __docker_services returns a list of all services. Additional options to # `docker service ls` may be specified in order to filter the list, e.g. # `__docker_services --filter name=xxx` # By default, only node names are returned. # Set DOCKER_COMPLETION_SHOW_SERVICE_IDS=yes to also complete IDs. # An optional first option `--id|--name` may be used to limit the # output to the IDs or names of matching items. This setting takes # precedence over the environment setting. __docker_services() { local format='{{.Name}}' # default: service name only [ "${DOCKER_COMPLETION_SHOW_SERVICE_IDS-}" = yes ] && format='{{.ID}} {{.Name}}' # ID & name if [ "${1-}" = "--id" ] ; then format='{{.ID}}' # IDs only shift elif [ "${1-}" = "--name" ] ; then format='{{.Name}}' # names only shift fi __docker_q service ls --quiet --format "$format" "$@" } # __docker_complete_services applies completion of services based on the current # value of `$cur` or the value of the optional first option `--cur`, if given. # Additional filters may be appended, see `__docker_services`. __docker_complete_services() { local current="$cur" if [ "${1-}" = "--cur" ] ; then current="$2" shift 2 fi COMPREPLY=( $(__docker_services "$@" --filter "name=$current") ) } # __docker_tasks returns a list of all task IDs. __docker_tasks() { __docker_q service ps --format '{{.ID}}' "" } # __docker_complete_services_and_tasks applies completion of services and task IDs. # shellcheck disable=SC2120 __docker_complete_services_and_tasks() { COMPREPLY=( $(compgen -W "$(__docker_services "$@") $(__docker_tasks)" -- "$cur") ) } # __docker_append_to_completions appends the word passed as an argument to every # word in `$COMPREPLY`. # Normally you do this with `compgen -S` while generating the completions. # This function allows you to append a suffix later. It allows you to use # the __docker_complete_XXX functions in cases where you need a suffix. __docker_append_to_completions() { COMPREPLY=( ${COMPREPLY[@]/%/"$1"} ) } # __docker_fetch_info fetches information about the configured Docker server and updates # several variables with the results. # The result is cached for the duration of one invocation of bash completion. __docker_fetch_info() { if [ -z "${info_fetched-}" ] ; then read -r server_experimental server_os <<< "$(__docker_q version -f '{{.Server.Experimental}} {{.Server.Os}}')" info_fetched=true fi } # __docker_server_is_experimental tests whether the currently configured Docker # server runs in experimental mode. If so, the function exits with 0 (true). # Otherwise, or if the result cannot be determined, the exit value is 1 (false). __docker_server_is_experimental() { __docker_fetch_info [ "$server_experimental" = "true" ] } # __docker_server_os_is tests whether the currently configured Docker server runs # on the operating system passed in as the first argument. # Known operating systems: linux, windows. __docker_server_os_is() { local expected_os="$1" __docker_fetch_info [ "$server_os" = "$expected_os" ] } # __docker_pos_first_nonflag finds the position of the first word that is neither # option nor an option's argument. If there are options that require arguments, # you should pass a glob describing those options, e.g. "--option1|-o|--option2" # Use this function to restrict completions to exact positions after the argument list. __docker_pos_first_nonflag() { local argument_flags=${1-} local counter=$((${subcommand_pos:-${command_pos}} + 1)) while [ "$counter" -le "$cword" ]; do if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then (( counter++ )) # eat "=" in case of --option=arg syntax [ "${words[$counter]}" = "=" ] && (( counter++ )) else case "${words[$counter]}" in -*) ;; *) break ;; esac fi # Bash splits words at "=", retaining "=" as a word, examples: # "--debug=false" => 3 words, "--log-opt syslog-facility=daemon" => 4 words while [ "${words[$counter + 1]}" = "=" ] ; do counter=$(( counter + 2)) done (( counter++ )) done echo "$counter" } # __docker_map_key_of_current_option returns `key` if we are currently completing the # value of a map option (`key=value`) which matches the extglob given as an argument. # This function is needed for key-specific completions. __docker_map_key_of_current_option() { local glob="$1" local key glob_pos if [ "$cur" = "=" ] ; then # key= case key="$prev" glob_pos=$((cword - 2)) elif [[ $cur == *=* ]] ; then # key=value case (OSX) key=${cur%=*} glob_pos=$((cword - 1)) elif [ "$prev" = "=" ] ; then key=${words[$cword - 2]} # key=value case glob_pos=$((cword - 3)) else return fi [ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax [[ ${words[$glob_pos]} == @($glob) ]] && echo "$key" } # __docker_value_of_option returns the value of the first option matching `option_glob`. # Valid values for `option_glob` are option names like `--log-level` and globs like # `--log-level|-l` # Only positions between the command and the current word are considered. __docker_value_of_option() { local option_extglob=$(__docker_to_extglob "$1") local counter=$((command_pos + 1)) while [ "$counter" -lt "$cword" ]; do case ${words[$counter]} in $option_extglob ) echo "${words[$counter + 1]}" break ;; esac (( counter++ )) done } # __docker_to_alternatives 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[*]}" } # __docker_to_extglob 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)" } # __docker_subcommands processes subcommands # Locates the first occurrence of any of the subcommands contained in the # first argument. In case of a match, calls the corresponding completion # function and returns 0. # If no match is found, 1 is returned. The calling function can then # continue processing its completion. # # TODO if the preceding command has options that accept arguments and an # argument is equal ot one of the subcommands, this is falsely detected as # a match. __docker_subcommands() { local subcommands="$1" local counter=$((command_pos + 1)) while [ "$counter" -lt "$cword" ]; do case "${words[$counter]}" in $(__docker_to_extglob "$subcommands") ) subcommand_pos=$counter local subcommand=${words[$counter]} local completions_func=_docker_${command}_${subcommand//-/_} declare -F "$completions_func" >/dev/null && "$completions_func" return 0 ;; esac (( counter++ )) done return 1 } # __docker_nospace suppresses trailing whitespace __docker_nospace() { # compopt is not available in ancient bash versions type compopt &>/dev/null && compopt -o nospace } __docker_complete_resolved_hostname() { command -v host >/dev/null 2>&1 || return COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') ) } # __docker_local_interfaces returns a list of the names and addresses of all # local network interfaces. # If `--ip-only` is passed as a first argument, only addresses are returned. __docker_local_interfaces() { command -v ip >/dev/null 2>&1 || return local format if [ "${1-}" = "--ip-only" ] ; then format='\1' shift else format='\1 \2' fi ip addr show scope global 2>/dev/null | sed -n "s| \+inet \([0-9.]\+\).* \([^ ]\+\)|$format|p" } # __docker_complete_local_interfaces applies completion of the names and addresses of all # local network interfaces based on the current value of `$cur`. # An additional value can be added to the possible completions with an `--add` argument. __docker_complete_local_interfaces() { local additional_interface if [ "${1-}" = "--add" ] ; then additional_interface="$2" shift 2 fi COMPREPLY=( $( compgen -W "$(__docker_local_interfaces "$@") $additional_interface" -- "$cur" ) ) } # __docker_complete_local_ips applies completion of the addresses of all local network # interfaces based on the current value of `$cur`. __docker_complete_local_ips() { __docker_complete_local_interfaces --ip-only } # __docker_complete_capabilities_addable completes Linux capabilities which are # not granted by default and may be added. # see https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities __docker_complete_capabilities_addable() { local capabilities=( ALL CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_BLOCK_SUSPEND CAP_BPF CAP_CHECKPOINT_RESTORE CAP_DAC_READ_SEARCH CAP_IPC_LOCK CAP_IPC_OWNER CAP_LEASE CAP_LINUX_IMMUTABLE CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_NET_ADMIN CAP_NET_BROADCAST CAP_PERFMON CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYSLOG CAP_SYS_MODULE CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_RAWIO CAP_SYS_RESOURCE CAP_SYS_TIME CAP_SYS_TTY_CONFIG CAP_WAKE_ALARM RESET ) COMPREPLY=( $( compgen -W "${capabilities[*]} ${capabilities[*]#CAP_}" -- "$cur" ) ) } # __docker_complete_capabilities_droppable completes Linux capability options which are # allowed by default and can be dropped. # see https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities __docker_complete_capabilities_droppable() { local capabilities=( ALL CAP_AUDIT_WRITE CAP_CHOWN CAP_DAC_OVERRIDE CAP_FOWNER CAP_FSETID CAP_KILL CAP_MKNOD CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETFCAP CAP_SETGID CAP_SETPCAP CAP_SETUID CAP_SYS_CHROOT RESET ) COMPREPLY=( $( compgen -W "${capabilities[*]} ${capabilities[*]#CAP_}" -- "$cur" ) ) } __docker_complete_detach_keys() { case "$prev" in --detach-keys) case "$cur" in *,) COMPREPLY=( $( compgen -W "${cur}ctrl-" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "ctrl-" -- "$cur" ) ) ;; esac __docker_nospace return ;; esac return 1 } __docker_complete_isolation() { COMPREPLY=( $( compgen -W "default hyperv process" -- "$cur" ) ) } __docker_complete_log_drivers() { COMPREPLY=( $( compgen -W " awslogs etwlogs fluentd gcplogs gelf journald json-file local none splunk syslog " -- "$cur" ) ) } __docker_complete_log_options() { # see https://docs.docker.com/config/containers/logging/configure/ # really global options, defined in https://github.com/moby/moby/blob/master/daemon/logger/factory.go local common_options1="max-buffer-size mode" # common options defined in https://github.com/moby/moby/blob/master/daemon/logger/loginfo.go # but not implemented in all log drivers local common_options2="env env-regex labels" # awslogs does not implement the $common_options2. local awslogs_options="$common_options1 awslogs-create-group awslogs-credentials-endpoint awslogs-datetime-format awslogs-group awslogs-multiline-pattern awslogs-region awslogs-stream tag" local fluentd_options="$common_options1 $common_options2 fluentd-address fluentd-async fluentd-buffer-limit fluentd-request-ack fluentd-retry-wait fluentd-max-retries fluentd-sub-second-precision tag" local gcplogs_options="$common_options1 $common_options2 gcp-log-cmd gcp-meta-id gcp-meta-name gcp-meta-zone gcp-project" local gelf_options="$common_options1 $common_options2 gelf-address gelf-compression-level gelf-compression-type gelf-tcp-max-reconnect gelf-tcp-reconnect-delay tag" local journald_options="$common_options1 $common_options2 tag" local json_file_options="$common_options1 $common_options2 compress max-file max-size" local local_options="$common_options1 compress max-file max-size" local splunk_options="$common_options1 $common_options2 splunk-caname splunk-capath splunk-format splunk-gzip splunk-gzip-level splunk-index splunk-insecureskipverify splunk-source splunk-sourcetype splunk-token splunk-url splunk-verify-connection tag" local syslog_options="$common_options1 $common_options2 syslog-address syslog-facility syslog-format syslog-tls-ca-cert syslog-tls-cert syslog-tls-key syslog-tls-skip-verify tag" local all_options="$fluentd_options $gcplogs_options $gelf_options $journald_options $json_file_options $syslog_options $splunk_options" case $(__docker_value_of_option --log-driver) in '') COMPREPLY=( $( compgen -W "$all_options" -S = -- "$cur" ) ) ;; awslogs) COMPREPLY=( $( compgen -W "$awslogs_options" -S = -- "$cur" ) ) ;; fluentd) COMPREPLY=( $( compgen -W "$fluentd_options" -S = -- "$cur" ) ) ;; gcplogs) COMPREPLY=( $( compgen -W "$gcplogs_options" -S = -- "$cur" ) ) ;; gelf) COMPREPLY=( $( compgen -W "$gelf_options" -S = -- "$cur" ) ) ;; journald) COMPREPLY=( $( compgen -W "$journald_options" -S = -- "$cur" ) ) ;; json-file) COMPREPLY=( $( compgen -W "$json_file_options" -S = -- "$cur" ) ) ;; local) COMPREPLY=( $( compgen -W "$local_options" -S = -- "$cur" ) ) ;; syslog) COMPREPLY=( $( compgen -W "$syslog_options" -S = -- "$cur" ) ) ;; splunk) COMPREPLY=( $( compgen -W "$splunk_options" -S = -- "$cur" ) ) ;; *) return ;; esac __docker_nospace } __docker_complete_log_driver_options() { local key=$(__docker_map_key_of_current_option '--log-opt') case "$key" in awslogs-create-group) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; awslogs-credentials-endpoint) COMPREPLY=( $( compgen -W "/" -- "${cur##*=}" ) ) __docker_nospace return ;; compress|fluentd-async-connect) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; fluentd-sub-second-precision) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; gelf-address) COMPREPLY=( $( compgen -W "tcp udp" -S "://" -- "${cur##*=}" ) ) __docker_nospace return ;; gelf-compression-level) COMPREPLY=( $( compgen -W "1 2 3 4 5 6 7 8 9" -- "${cur##*=}" ) ) return ;; gelf-compression-type) COMPREPLY=( $( compgen -W "gzip none zlib" -- "${cur##*=}" ) ) return ;; line-only) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; mode) COMPREPLY=( $( compgen -W "blocking non-blocking" -- "${cur##*=}" ) ) return ;; syslog-address) COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur##*=}" ) ) __docker_nospace __ltrim_colon_completions "${cur}" return ;; syslog-facility) COMPREPLY=( $( compgen -W " auth authpriv cron daemon ftp kern local0 local1 local2 local3 local4 local5 local6 local7 lpr mail news syslog user uucp " -- "${cur##*=}" ) ) return ;; syslog-format) COMPREPLY=( $( compgen -W "rfc3164 rfc5424 rfc5424micro" -- "${cur##*=}" ) ) return ;; syslog-tls-ca-cert|syslog-tls-cert|syslog-tls-key) _filedir return ;; syslog-tls-skip-verify) COMPREPLY=( $( compgen -W "true" -- "${cur##*=}" ) ) return ;; splunk-url) COMPREPLY=( $( compgen -W "http:// https://" -- "${cur##*=}" ) ) __docker_nospace __ltrim_colon_completions "${cur}" return ;; splunk-gzip|splunk-insecureskipverify|splunk-verify-connection) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; splunk-format) COMPREPLY=( $( compgen -W "inline json raw" -- "${cur##*=}" ) ) return ;; esac return 1 } __docker_complete_log_levels() { COMPREPLY=( $( compgen -W "debug info warn error fatal" -- "$cur" ) ) } __docker_complete_restart() { case "$prev" in --restart) case "$cur" in on-failure:*) ;; *) COMPREPLY=( $( compgen -W "always no on-failure on-failure: unless-stopped" -- "$cur") ) ;; esac return ;; esac return 1 } # __docker_complete_signals returns a subset of the available signals that is most likely # relevant in the context of docker containers __docker_complete_signals() { local signals=( SIGCONT SIGHUP SIGINT SIGKILL SIGQUIT SIGSTOP SIGTERM SIGUSR1 SIGUSR2 ) COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo "$cur" | tr '[:lower:]' '[:upper:]')" ) ) } __docker_complete_ulimits() { local limits=" as chroot core cpu data fsize locks maxlogins maxsyslogins memlock msgqueue nice nofile nproc priority rss rtprio sigpending stack " if [ "${1-}" = "--rm" ] ; then COMPREPLY=( $( compgen -W "$limits" -- "$cur" ) ) else COMPREPLY=( $( compgen -W "$limits" -S = -- "$cur" ) ) __docker_nospace fi } __docker_complete_user_group() { if [[ $cur == *:* ]] ; then COMPREPLY=( $(compgen -g -- "${cur#*:}") ) else COMPREPLY=( $(compgen -u -S : -- "$cur") ) __docker_nospace fi } __docker_plugins_path() { local docker_plugins_path=$(docker info --format '{{range .ClientInfo.Plugins}}{{.Path}}:{{end}}') echo "${docker_plugins_path//:/ }" } __docker_complete_plugin() { local path=$1 local completionCommand="__completeNoDesc" local resultArray=($path $completionCommand) local current="$cur" for value in "${words[@]:2}"; do if [ -z "$value" ]; then resultArray+=( "''" ) else resultArray+=( "$value" ) fi done local rawResult=$(eval "${resultArray[*]}" 2> /dev/null) local result=$(grep -v '^:[0-9]*$' <<< "$rawResult") # Compose V2 completions sometimes returns returns `:8` (ShellCompDirectiveFilterFileExt) # with the expected file extensions (such as `yml`, `yaml`) to indicate that the shell should # provide autocompletions for files with matching extensions local completionFlag=$(tail -1 <<< "$rawResult") if [ "$completionFlag" == ":8" ]; then # format a valid glob pattern for the provided file extensions local filePattern=$(tr '\n' '|' <<< "$result") _filedir "$filePattern" return fi # if result empty, just use filename completion as fallback if [ -z "$result" ]; then _filedir else COMPREPLY=( $(compgen -W "${result}" -- "${current-}") ) fi } _docker_docker() { # global options that may appear after the docker command local boolean_options=" $global_boolean_options --help --version -v " case "$prev" in --config) _filedir -d return ;; --context|-c) __docker_complete_contexts return ;; --log-level|-l) __docker_complete_log_levels return ;; $(__docker_to_extglob "$global_options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$boolean_options $global_options_with_args" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "$(__docker_to_extglob "$global_options_with_args")" ) if [ "$cword" -eq "$counter" ]; then __docker_server_is_experimental && commands+=(${experimental_server_commands[*]}) COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) fi ;; esac } _docker_attach() { _docker_container_attach } _docker_build() { _docker_image_build } _docker_builder() { local subcommands=" build prune " __docker_subcommands "$subcommands" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_builder_build() { _docker_image_build } _docker_builder_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -S = -W "description id inuse parent private shared type until unused-for" -- "$cur" ) ) __docker_nospace return ;; --keep-storage) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --filter --force -f --help --keep-storage" -- "$cur" ) ) ;; esac } _docker_checkpoint() { local subcommands=" create ls rm " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_checkpoint_create() { case "$prev" in --checkpoint-dir) _filedir -d return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--checkpoint-dir --help --leave-running" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_running fi ;; esac } _docker_checkpoint_ls() { case "$prev" in --checkpoint-dir) _filedir -d return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--checkpoint-dir --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_checkpoint_rm() { case "$prev" in --checkpoint-dir) _filedir -d return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--checkpoint-dir --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all elif [ "$cword" -eq "$((counter + 1))" ]; then COMPREPLY=( $( compgen -W "$(__docker_q checkpoint ls "$prev" | sed 1d)" -- "$cur" ) ) fi ;; esac } _docker_config() { local subcommands=" create inspect ls rm " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_config_create() { case "$prev" in --label|-l) return ;; --template-driver) COMPREPLY=( $( compgen -W "golang" -- "$cur" ) ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --label -l --template-driver" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--label|-l|--template-driver') if [ "$cword" -eq "$((counter + 1))" ]; then _filedir fi ;; esac } _docker_config_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) ;; *) __docker_complete_configs ;; esac } _docker_config_list() { _docker_config_ls } _docker_config_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in id) __docker_complete_configs --cur "${cur##*=}" --id return ;; name) __docker_complete_configs --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "id label name" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format --filter -f --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_config_remove() { _docker_config_rm } _docker_config_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_configs ;; esac } _docker_container() { local subcommands=" attach commit cp create diff exec export inspect kill logs ls pause port prune rename restart rm run start stats stop top unpause update wait " local aliases=" list ps " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_container_attach() { __docker_complete_detach_keys && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--detach-keys --help --no-stdin --sig-proxy=false" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--detach-keys') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_running fi ;; esac } _docker_container_commit() { case "$prev" in --author|-a|--change|-c|--message|-m) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--author -a --change -c --help --message -m --pause=false -p=false" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--author|-a|--change|-c|--message|-m') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all return elif [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_images --repo --tag return fi ;; esac } _docker_container_cp() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--archive -a --follow-link -L --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then case "$cur" in *:) return ;; *) # combined container and filename completion _filedir local files=( ${COMPREPLY[@]} ) __docker_complete_containers_all COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) local containers=( ${COMPREPLY[@]} ) COMPREPLY=( $( compgen -W "${files[*]} ${containers[*]}" -- "$cur" ) ) if [[ "${COMPREPLY[*]}" = *: ]]; then __docker_nospace fi return ;; esac fi (( counter++ )) if [ "$cword" -eq "$counter" ]; then if [ -e "$prev" ]; then __docker_complete_containers_all COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) __docker_nospace else _filedir fi return fi ;; esac } _docker_container_create() { _docker_container_run_and_create } _docker_container_diff() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_container_exec() { __docker_complete_detach_keys && return case "$prev" in --env|-e) # we do not append a "=" here because "-e VARNAME" is legal syntax, too COMPREPLY=( $( compgen -e -- "$cur" ) ) __docker_nospace return ;; --env-file) _filedir return ;; --user|-u) __docker_complete_user_group return ;; --workdir|-w) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--detach -d --detach-keys --env -e --env-file --help --interactive -i --privileged -t --tty -u --user --workdir -w" -- "$cur" ) ) ;; *) __docker_complete_containers_running ;; esac } _docker_container_export() { case "$prev" in --output|-o) _filedir return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_container_inspect() { _docker_inspect --type container } _docker_container_kill() { case "$prev" in --signal|-s) __docker_complete_signals return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --signal -s" -- "$cur" ) ) ;; *) __docker_complete_containers_running ;; esac } _docker_container_logs() { case "$prev" in --since|--tail|-n|--until) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--details --follow -f --help --since --tail -n --timestamps -t --until" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--since|--tail|-n|--until') if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_container_list() { _docker_container_ls } _docker_container_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in ancestor) __docker_complete_images --cur "${cur##*=}" --repo --tag --id return ;; before) __docker_complete_containers_all --cur "${cur##*=}" return ;; expose|publish) return ;; id) __docker_complete_containers_all --cur "${cur##*=}" --id return ;; health) COMPREPLY=( $( compgen -W "healthy starting none unhealthy" -- "${cur##*=}" ) ) return ;; is-task) COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) ) return ;; name) __docker_complete_containers_all --cur "${cur##*=}" --name return ;; network) __docker_complete_networks --cur "${cur##*=}" return ;; since) __docker_complete_containers_all --cur "${cur##*=}" return ;; status) COMPREPLY=( $( compgen -W "created dead exited paused restarting running removing" -- "${cur##*=}" ) ) return ;; volume) __docker_complete_volumes --cur "${cur##*=}" return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "ancestor before exited expose health id is-task label name network publish since status volume" -- "$cur" ) ) __docker_nospace return ;; --format|--last|-n) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --filter -f --format --help --last -n --latest -l --no-trunc --quiet -q --size -s" -- "$cur" ) ) ;; esac } _docker_container_pause() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_containers_running ;; esac } _docker_container_port() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_container_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -W "label label! until" -S = -- "$cur" ) ) __docker_nospace return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --filter --help" -- "$cur" ) ) ;; esac } _docker_container_ps() { _docker_container_ls } _docker_container_rename() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_all fi ;; esac } _docker_container_restart() { case "$prev" in --time|-t) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) ;; *) __docker_complete_containers_all ;; esac } _docker_container_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help --link -l --volumes -v" -- "$cur" ) ) ;; *) for arg in "${COMP_WORDS[@]}"; do case "$arg" in --force|-f) __docker_complete_containers_all return ;; esac done __docker_complete_containers_removable ;; esac } _docker_container_run() { _docker_container_run_and_create } # _docker_container_run_and_create is the combined completion for `_docker_container_run` # and `_docker_container_create` _docker_container_run_and_create() { local options_with_args=" --add-host --annotation --attach -a --blkio-weight --blkio-weight-device --cap-add --cap-drop --cgroupns --cgroup-parent --cidfile --cpu-period --cpu-quota --cpu-rt-period --cpu-rt-runtime --cpuset-cpus --cpus --cpuset-mems --cpu-shares -c --device --device-cgroup-rule --device-read-bps --device-read-iops --device-write-bps --device-write-iops --dns --dns-option --dns-search --domainname --entrypoint --env -e --env-file --expose --gpus --group-add --health-cmd --health-interval --health-retries --health-start-period --health-timeout --hostname -h --ip --ip6 --ipc --kernel-memory --label-file --label -l --link --link-local-ip --log-driver --log-opt --mac-address --memory -m --memory-swap --memory-swappiness --memory-reservation --mount --name --network --network-alias --oom-score-adj --pid --pids-limit --platform --publish -p --pull --restart --runtime --security-opt --shm-size --stop-signal --stop-timeout --storage-opt --tmpfs --sysctl --ulimit --user -u --userns --uts --volume-driver --volumes-from --volume -v --workdir -w " __docker_server_os_is windows && options_with_args+=" --cpu-count --cpu-percent --io-maxbandwidth --io-maxiops --isolation " local boolean_options=" --disable-content-trust=false --help --init --interactive -i --no-healthcheck --oom-kill-disable --privileged --publish-all -P --quiet -q --read-only --tty -t " if [ "$command" = "run" ] || [ "$subcommand" = "run" ] ; then options_with_args="$options_with_args --detach-keys " boolean_options="$boolean_options --detach -d --rm --sig-proxy=false " __docker_complete_detach_keys && return fi local all_options="$options_with_args $boolean_options" __docker_complete_log_driver_options && return __docker_complete_restart && return local key=$(__docker_map_key_of_current_option '--security-opt') case "$key" in label) [[ $cur == *: ]] && return COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "${cur##*=}") ) if [ "${COMPREPLY[*]}" != "disable" ] ; then __docker_nospace fi return ;; seccomp) local cur=${cur##*=} _filedir COMPREPLY+=( $( compgen -W "unconfined" -- "$cur" ) ) return ;; esac case "$prev" in --add-host) case "$cur" in *:) __docker_complete_resolved_hostname return ;; esac ;; --attach|-a) COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) ) return ;; --cap-add) __docker_complete_capabilities_addable return ;; --cap-drop) __docker_complete_capabilities_droppable return ;; --cidfile|--env-file|--label-file) _filedir return ;; --cgroupns) COMPREPLY=( $( compgen -W "host private" -- "$cur" ) ) return ;; --device|--tmpfs|--volume|-v) 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" ) ) __docker_nospace ;; /*) _filedir __docker_nospace ;; esac return ;; --env|-e) # we do not append a "=" here because "-e VARNAME" is legal syntax, too COMPREPLY=( $( compgen -e -- "$cur" ) ) __docker_nospace return ;; --ipc) case "$cur" in *:*) cur="${cur#*:}" __docker_complete_containers_running ;; *) COMPREPLY=( $( compgen -W 'none host private shareable container:' -- "$cur" ) ) if [ "${COMPREPLY[*]}" = "container:" ]; then __docker_nospace fi ;; esac return ;; --isolation) if __docker_server_os_is windows ; then __docker_complete_isolation return fi ;; --link) case "$cur" in *:*) ;; *) __docker_complete_containers_running COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) __docker_nospace ;; esac return ;; --log-driver) __docker_complete_log_drivers return ;; --log-opt) __docker_complete_log_options return ;; --network) case "$cur" in container:*) __docker_complete_containers_all --cur "${cur#*:}" ;; *) COMPREPLY=( $( compgen -W "$(__docker_plugins_bundled --type Network) $(__docker_networks) container:" -- "$cur") ) if [ "${COMPREPLY[*]}" = "container:" ] ; then __docker_nospace fi ;; esac return ;; --pid) case "$cur" in *:*) __docker_complete_containers_running --cur "${cur#*:}" ;; *) COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) ) if [ "${COMPREPLY[*]}" = "container:" ]; then __docker_nospace fi ;; esac return ;; --pull) COMPREPLY=( $( compgen -W 'always missing never' -- "$cur" ) ) return ;; --runtime) __docker_complete_runtimes return ;; --security-opt) COMPREPLY=( $( compgen -W "apparmor= label= no-new-privileges seccomp= systempaths=unconfined" -- "$cur") ) if [[ ${COMPREPLY[*]} = *= ]] ; then __docker_nospace fi return ;; --stop-signal) __docker_complete_signals return ;; --storage-opt) COMPREPLY=( $( compgen -W "size" -S = -- "$cur") ) __docker_nospace return ;; --ulimit) __docker_complete_ulimits return ;; --user|-u) __docker_complete_user_group return ;; --userns) COMPREPLY=( $( compgen -W "host" -- "$cur" ) ) return ;; --volume-driver) __docker_complete_plugins_bundled --type Volume return ;; --volumes-from) __docker_complete_containers_all return ;; $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "$( __docker_to_alternatives "$options_with_args" )" ) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --repo --tag --id fi ;; esac } _docker_container_start() { __docker_complete_detach_keys && return case "$prev" in --checkpoint) if __docker_server_is_experimental ; then return fi ;; --checkpoint-dir) if __docker_server_is_experimental ; then _filedir -d return fi ;; esac case "$cur" in -*) local options="--attach -a --detach-keys --help --interactive -i" __docker_server_is_experimental && options+=" --checkpoint --checkpoint-dir" COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) ;; *) __docker_complete_containers_stopped ;; esac } _docker_container_stats() { case "$prev" in --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --format --help --no-stream --no-trunc" -- "$cur" ) ) ;; *) __docker_complete_containers_running ;; esac } _docker_container_stop() { case "$prev" in --time|-t) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) ;; *) __docker_complete_containers_stoppable ;; esac } _docker_container_top() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_running fi ;; esac } _docker_container_unpause() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_containers_unpauseable fi ;; esac } _docker_container_update() { local options_with_args=" --blkio-weight --cpu-period --cpu-quota --cpu-rt-period --cpu-rt-runtime --cpus --cpuset-cpus --cpuset-mems --cpu-shares -c --kernel-memory --memory -m --memory-reservation --memory-swap --pids-limit --restart " local boolean_options=" --help " local all_options="$options_with_args $boolean_options" __docker_complete_restart && return case "$prev" in $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) ;; *) __docker_complete_containers_all ;; esac } _docker_container_wait() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_containers_all ;; esac } _docker_context() { local subcommands=" create export import inspect ls rm update use " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_context_create() { case "$prev" in --description|--docker) return ;; --from) __docker_complete_contexts return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--description --docker --from --help" -- "$cur" ) ) ;; esac } _docker_context_export() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_contexts elif [ "$cword" -eq "$((counter + 1))" ]; then _filedir fi ;; esac } _docker_context_import() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then : elif [ "$cword" -eq "$((counter + 1))" ]; then _filedir fi ;; esac } _docker_context_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; *) __docker_complete_contexts ;; esac } _docker_context_list() { _docker_context_ls } _docker_context_ls() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_context_remove() { _docker_context_rm } _docker_context_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) __docker_complete_contexts ;; esac } _docker_context_update() { case "$prev" in --description|--docker) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--description --docker --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_contexts fi ;; esac } _docker_context_use() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_contexts --add default fi ;; esac } _docker_commit() { _docker_container_commit } _docker_cp() { _docker_container_cp } _docker_create() { _docker_container_create } _docker_daemon() { local boolean_options=" $global_boolean_options --experimental --help --icc=false --init --ip-forward=false --ip-masq=false --iptables=false --ip6tables --ipv6 --live-restore --no-new-privileges --raw-logs --selinux-enabled --userland-proxy=false --validate --version -v " local options_with_args=" $global_options_with_args --add-runtime --allow-nondistributable-artifacts --api-cors-header --authorization-plugin --bip --bridge -b --cgroup-parent --config-file --containerd --containerd-namespace --containerd-plugins-namespace --cpu-rt-period --cpu-rt-runtime --data-root --default-address-pool --default-gateway --default-gateway-v6 --default-runtime --default-shm-size --default-ulimit --dns --dns-search --dns-opt --exec-opt --exec-root --fixed-cidr --fixed-cidr-v6 --group -G --init-path --insecure-registry --ip --label --log-driver --log-opt --max-concurrent-downloads --max-concurrent-uploads --max-download-attempts --metrics-addr --mtu --network-control-plane-mtu --node-generic-resource --pidfile -p --registry-mirror --seccomp-profile --shutdown-timeout --storage-driver -s --storage-opt --swarm-default-advertise-addr --userland-proxy-path --userns-remap " __docker_complete_log_driver_options && return local key=$(__docker_map_key_of_current_option '--storage-opt') case "$key" in dm.blkdiscard|dm.override_udev_sync_check|dm.use_deferred_removal|dm.use_deferred_deletion) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; dm.directlvm_device|dm.thinpooldev) cur=${cur##*=} _filedir return ;; dm.fs) COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur##*=}" ) ) return ;; dm.libdm_log_level) COMPREPLY=( $( compgen -W "2 3 4 5 6 7" -- "${cur##*=}" ) ) return ;; esac case "$prev" in --authorization-plugin) __docker_complete_plugins_bundled --type Authorization return ;; --config-file|--containerd|--init-path|--pidfile|-p|--tlscacert|--tlscert|--tlskey|--userland-proxy-path) _filedir return ;; --default-ulimit) __docker_complete_ulimits return ;; --exec-root|--data-root) _filedir -d return ;; --log-driver) __docker_complete_log_drivers return ;; --storage-driver|-s) COMPREPLY=( $( compgen -W "btrfs overlay2 vfs zfs" -- "$(echo "$cur" | tr '[:upper:]' '[:lower:]')" ) ) return ;; --storage-opt) local btrfs_options="btrfs.min_space" local overlay2_options="overlay2.size" local zfs_options="zfs.fsname" local all_options="$btrfs_options $overlay2_options $zfs_options" case $(__docker_value_of_option '--storage-driver|-s') in '') COMPREPLY=( $( compgen -W "$all_options" -S = -- "$cur" ) ) ;; btrfs) COMPREPLY=( $( compgen -W "$btrfs_options" -S = -- "$cur" ) ) ;; overlay2) COMPREPLY=( $( compgen -W "$overlay2_options" -S = -- "$cur" ) ) ;; zfs) COMPREPLY=( $( compgen -W "$zfs_options" -S = -- "$cur" ) ) ;; *) return ;; esac __docker_nospace return ;; --log-level|-l) __docker_complete_log_levels return ;; --log-opt) __docker_complete_log_options return ;; --metrics-addr) __docker_complete_local_ips __docker_append_to_completions ":" __docker_nospace return ;; --seccomp-profile) _filedir json return ;; --swarm-default-advertise-addr) __docker_complete_local_interfaces return ;; --userns-remap) __docker_complete_user_group return ;; $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) ;; esac } _docker_diff() { _docker_container_diff } _docker_events() { _docker_system_events } _docker_exec() { _docker_container_exec } _docker_export() { _docker_container_export } _docker_help() { local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) ) fi } _docker_history() { _docker_image_history } _docker_image() { local subcommands=" build history import inspect load ls prune pull push rm save tag " local aliases=" images list remove rmi " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_image_build() { local options_with_args=" --add-host --build-arg --cache-from --cgroup-parent --cpuset-cpus --cpuset-mems --cpu-shares -c --cpu-period --cpu-quota --file -f --iidfile --label --memory -m --memory-swap --network --platform --shm-size --tag -t --target --ulimit " __docker_server_os_is windows && options_with_args+=" --isolation " local boolean_options=" --disable-content-trust=false --force-rm --help --no-cache --pull --quiet -q --rm " if __docker_server_is_experimental ; then boolean_options+=" --squash " fi if [ "${DOCKER_BUILDKIT-}" = "1" ] ; then options_with_args+=" --output -o --progress --secret --ssh " else boolean_options+=" --compress " fi local all_options="$options_with_args $boolean_options" case "$prev" in --add-host) case "$cur" in *:) __docker_complete_resolved_hostname return ;; esac ;; --build-arg) COMPREPLY=( $( compgen -e -- "$cur" ) ) __docker_nospace return ;; --cache-from) __docker_complete_images --repo --tag --id return ;; --file|-f|--iidfile) _filedir return ;; --isolation) if __docker_server_os_is windows ; then __docker_complete_isolation return fi ;; --network) case "$cur" in container:*) __docker_complete_containers_all --cur "${cur#*:}" ;; *) COMPREPLY=( $( compgen -W "$(__docker_plugins_bundled --type Network) $(__docker_networks) container:" -- "$cur") ) if [ "${COMPREPLY[*]}" = "container:" ] ; then __docker_nospace fi ;; esac return ;; --progress) COMPREPLY=( $( compgen -W "auto plain tty" -- "$cur" ) ) return ;; --tag|-t) __docker_complete_images --repo --tag return ;; --target) local context_pos=$( __docker_pos_first_nonflag "$( __docker_to_alternatives "$options_with_args" )" ) local context="${words[$context_pos]}" context="${context:-.}" local file="$( __docker_value_of_option '--file|f' )" local default_file="${context%/}/Dockerfile" local dockerfile="${file:-$default_file}" local targets="$( sed -n 's/^FROM .\+ AS \(.\+\)/\1/p' "$dockerfile" 2>/dev/null )" COMPREPLY=( $( compgen -W "$targets" -- "$cur" ) ) return ;; --ulimit) __docker_complete_ulimits return ;; $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "$( __docker_to_alternatives "$options_with_args" )" ) if [ "$cword" -eq "$counter" ]; then _filedir -d fi ;; esac } _docker_image_history() { case "$prev" in --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format --help --human=false -H=false --no-trunc --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--format') if [ "$cword" -eq "$counter" ]; then __docker_complete_images --force-tag --id fi ;; esac } _docker_image_images() { _docker_image_ls } _docker_image_import() { case "$prev" in --change|-c|--message|-m|--platform) return ;; esac case "$cur" in -*) local options="--change -c --help --message -m --platform" COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--change|-c|--message|-m') if [ "$cword" -eq "$counter" ]; then _filedir return elif [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_images --repo --tag return fi ;; esac } _docker_image_inspect() { _docker_inspect --type image } _docker_image_load() { case "$prev" in --input|-i|"<") _filedir return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --input -i --quiet -q" -- "$cur" ) ) ;; esac } _docker_image_list() { _docker_image_ls } _docker_image_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in before|since) __docker_complete_images --cur "${cur##*=}" --force-tag --id return ;; dangling) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; label) return ;; reference) __docker_complete_images --cur "${cur##*=}" --repo --tag return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "before dangling label reference since" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --digests --filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) ;; =) return ;; *) __docker_complete_images --repo --tag ;; esac } _docker_image_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -W "label label! until" -S = -- "$cur" ) ) __docker_nospace return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --force -f --filter --help" -- "$cur" ) ) ;; esac } _docker_image_pull() { case "$prev" in --platform) return ;; esac case "$cur" in -*) local options="--all-tags -a --disable-content-trust=false --help --platform --quiet -q" COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag --platform) if [ "$cword" -eq "$counter" ]; then for arg in "${COMP_WORDS[@]}"; do case "$arg" in --all-tags|-a) __docker_complete_images --repo return ;; esac done __docker_complete_images --repo --tag fi ;; esac } _docker_image_push() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--all-tags -a --disable-content-trust=false --help --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --repo --tag fi ;; esac } _docker_image_remove() { _docker_image_rm } _docker_image_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) ) ;; *) __docker_complete_images --force-tag --id ;; esac } _docker_image_rmi() { _docker_image_rm } _docker_image_save() { case "$prev" in --output|-o|">") _filedir return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) ) ;; *) __docker_complete_images --repo --tag --id ;; esac } _docker_image_tag() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --force-tag --id return elif [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_images --repo --tag return fi ;; esac } _docker_images() { _docker_image_ls } _docker_import() { _docker_image_import } _docker_info() { _docker_system_info } _docker_inspect() { local preselected_type local type if [ "${1-}" = "--type" ] ; then preselected_type=yes type="$2" else type=$(__docker_value_of_option --type) fi case "$prev" in --format|-f) return ;; --type) if [ -z "$preselected_type" ] ; then COMPREPLY=( $( compgen -W "container image network node plugin secret service volume" -- "$cur" ) ) return fi ;; esac case "$cur" in -*) local options="--format -f --help --size -s" if [ -z "$preselected_type" ] ; then options+=" --type" fi COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) ;; *) case "$type" in '') COMPREPLY=( $( compgen -W " $(__docker_containers --all) $(__docker_images --force-tag --id) $(__docker_networks) $(__docker_nodes) $(__docker_plugins_installed) $(__docker_secrets) $(__docker_services) $(__docker_volumes) " -- "$cur" ) ) __ltrim_colon_completions "$cur" ;; container) __docker_complete_containers_all ;; image) __docker_complete_images --force-tag --id ;; network) __docker_complete_networks ;; node) __docker_complete_nodes ;; plugin) __docker_complete_plugins_installed ;; secret) __docker_complete_secrets ;; service) __docker_complete_services ;; volume) __docker_complete_volumes ;; esac esac } _docker_kill() { _docker_container_kill } _docker_load() { _docker_image_load } _docker_login() { case "$prev" in --password|-p|--username|-u) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --password -p --password-stdin --username -u" -- "$cur" ) ) ;; esac } _docker_logout() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; esac } _docker_logs() { _docker_container_logs } _docker_network_connect() { local options_with_args=" --alias --ip --ip6 --link --link-local-ip " local boolean_options=" --help " case "$prev" in --link) case "$cur" in *:*) ;; *) __docker_complete_containers_running COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) __docker_nospace ;; esac return ;; $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "$( __docker_to_alternatives "$options_with_args" )" ) if [ "$cword" -eq "$counter" ]; then __docker_complete_networks elif [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_containers_all fi ;; esac } _docker_network_create() { case "$prev" in --aux-address|--gateway|--ip-range|--ipam-opt|--ipv6|--opt|-o|--subnet) return ;; --config-from) __docker_complete_networks return ;; --driver|-d) # remove drivers that allow one instance only, add drivers missing in `docker info` __docker_complete_plugins_bundled --type Network --remove host --remove null --add macvlan return ;; --ipam-driver) COMPREPLY=( $( compgen -W "default" -- "$cur" ) ) return ;; --label) return ;; --scope) COMPREPLY=( $( compgen -W "local swarm" -- "$cur" ) ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--attachable --aux-address --config-from --config-only --driver -d --gateway --help --ingress --internal --ip-range --ipam-driver --ipam-opt --ipv6 --label --opt -o --scope --subnet" -- "$cur" ) ) ;; esac } _docker_network_disconnect() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_networks elif [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_containers_in_network "$prev" fi ;; esac } _docker_network_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --verbose" -- "$cur" ) ) ;; *) __docker_complete_networks esac } _docker_network_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in dangling) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; driver) __docker_complete_plugins_bundled --cur "${cur##*=}" --type Network --add macvlan return ;; id) __docker_complete_networks --cur "${cur##*=}" --id return ;; name) __docker_complete_networks --cur "${cur##*=}" --name return ;; scope) COMPREPLY=( $( compgen -W "global local swarm" -- "${cur##*=}" ) ) return ;; type) COMPREPLY=( $( compgen -W "builtin custom" -- "${cur##*=}" ) ) return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "dangling driver id label name scope type" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) ;; esac } _docker_network_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -W "label label! until" -S = -- "$cur" ) ) __docker_nospace return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --filter --help" -- "$cur" ) ) ;; esac } _docker_network_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) __docker_complete_networks --filter type=custom esac } _docker_network() { local subcommands=" connect create disconnect inspect ls prune rm " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_service() { local subcommands=" create inspect logs ls rm rollback scale ps update " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_service_create() { _docker_service_update_and_create } _docker_service_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) ;; *) __docker_complete_services esac } _docker_service_logs() { case "$prev" in --since|--tail|-n) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--details --follow -f --help --no-resolve --no-task-ids --no-trunc --raw --since --tail -n --timestamps -t" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--since|--tail|-n') if [ "$cword" -eq "$counter" ]; then __docker_complete_services_and_tasks fi ;; esac } _docker_service_list() { _docker_service_ls } _docker_service_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in id) __docker_complete_services --cur "${cur##*=}" --id return ;; mode) COMPREPLY=( $( compgen -W "global global-job replicated replicated-job" -- "${cur##*=}" ) ) return ;; name) __docker_complete_services --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -W "id label mode name" -S = -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_service_remove() { _docker_service_rm } _docker_service_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_services esac } _docker_service_rollback() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--detach -d --help --quit -q" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag ) if [ "$cword" -eq "$counter" ]; then __docker_complete_services fi ;; esac } _docker_service_scale() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--detach -d --help" -- "$cur" ) ) ;; *) __docker_complete_services __docker_append_to_completions "=" __docker_nospace ;; esac } _docker_service_ps() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in desired-state) COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) return ;; name) __docker_complete_services --cur "${cur##*=}" --name return ;; node) __docker_complete_nodes --cur "${cur##*=}" --add self return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -W "desired-state id name node" -S = -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --no-resolve --no-trunc --quiet -q" -- "$cur" ) ) ;; *) __docker_complete_services ;; esac } _docker_service_update() { _docker_service_update_and_create } # _docker_service_update_and_create is the combined completion for `docker service create` # and `docker service update` _docker_service_update_and_create() { local options_with_args=" --cap-add --cap-drop --endpoint-mode --entrypoint --health-cmd --health-interval --health-retries --health-start-period --health-timeout --hostname --isolation --limit-cpu --limit-memory --limit-pids --log-driver --log-opt --max-replicas --replicas --replicas-max-per-node --reserve-cpu --reserve-memory --restart-condition --restart-delay --restart-max-attempts --restart-window --rollback-delay --rollback-failure-action --rollback-max-failure-ratio --rollback-monitor --rollback-order --rollback-parallelism --stop-grace-period --stop-signal --update-delay --update-failure-action --update-max-failure-ratio --update-monitor --update-order --update-parallelism --user -u --workdir -w " __docker_server_os_is windows && options_with_args+=" --credential-spec " local boolean_options=" --detach -d --help --init --no-healthcheck --no-resolve-image --read-only --tty -t --with-registry-auth " __docker_complete_log_driver_options && return if [ "$subcommand" = "create" ] ; then options_with_args="$options_with_args --config --constraint --container-label --dns --dns-option --dns-search --env -e --env-file --generic-resource --group --host --label -l --mode --mount --name --network --placement-pref --publish -p --secret --sysctl --ulimit " case "$prev" in --env-file) _filedir return ;; --mode) COMPREPLY=( $( compgen -W "global global-job replicated replicated-job" -- "$cur" ) ) return ;; esac fi if [ "$subcommand" = "update" ] ; then options_with_args="$options_with_args --args --config-add --config-rm --constraint-add --constraint-rm --container-label-add --container-label-rm --dns-add --dns-option-add --dns-option-rm --dns-rm --dns-search-add --dns-search-rm --env-add --env-rm --generic-resource-add --generic-resource-rm --group-add --group-rm --host-add --host-rm --image --label-add --label-rm --mount-add --mount-rm --network-add --network-rm --placement-pref-add --placement-pref-rm --publish-add --publish-rm --rollback --secret-add --secret-rm --sysctl-add --sysctl-rm --ulimit-add --ulimit-rm " boolean_options="$boolean_options --force " case "$prev" in --env-rm) COMPREPLY=( $( compgen -e -- "$cur" ) ) return ;; --image) __docker_complete_images --repo --tag --id return ;; esac fi local strategy=$(__docker_map_key_of_current_option '--placement-pref|--placement-pref-add|--placement-pref-rm') case "$strategy" in spread) COMPREPLY=( $( compgen -W "engine.labels node.labels" -S . -- "${cur##*=}" ) ) __docker_nospace return ;; esac case "$prev" in --cap-add) __docker_complete_capabilities_addable return ;; --cap-drop) __docker_complete_capabilities_droppable return ;; --config|--config-add|--config-rm) __docker_complete_configs return ;; --endpoint-mode) COMPREPLY=( $( compgen -W "dnsrr vip" -- "$cur" ) ) return ;; --env|-e|--env-add) # we do not append a "=" here because "-e VARNAME" is legal systax, too COMPREPLY=( $( compgen -e -- "$cur" ) ) __docker_nospace return ;; --group|--group-add|--group-rm) COMPREPLY=( $(compgen -g -- "$cur") ) return ;; --host|--host-add|--host-rm) case "$cur" in *:) __docker_complete_resolved_hostname return ;; esac ;; --isolation) __docker_complete_isolation return ;; --log-driver) __docker_complete_log_drivers return ;; --log-opt) __docker_complete_log_options return ;; --network|--network-add|--network-rm) __docker_complete_networks return ;; --placement-pref|--placement-pref-add|--placement-pref-rm) COMPREPLY=( $( compgen -W "spread" -S = -- "$cur" ) ) __docker_nospace return ;; --restart-condition) COMPREPLY=( $( compgen -W "any none on-failure" -- "$cur" ) ) return ;; --rollback-failure-action) COMPREPLY=( $( compgen -W "continue pause" -- "$cur" ) ) return ;; --secret|--secret-add|--secret-rm) __docker_complete_secrets return ;; --stop-signal) __docker_complete_signals return ;; --update-failure-action) COMPREPLY=( $( compgen -W "continue pause rollback" -- "$cur" ) ) return ;; --ulimit|--ulimit-add) __docker_complete_ulimits return ;; --ulimit-rm) __docker_complete_ulimits --rm return ;; --update-order|--rollback-order) COMPREPLY=( $( compgen -W "start-first stop-first" -- "$cur" ) ) return ;; --user|-u) __docker_complete_user_group return ;; $(__docker_to_extglob "$options_with_args") ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "$( __docker_to_alternatives "$options_with_args" )" ) if [ "$subcommand" = "update" ] ; then if [ "$cword" -eq "$counter" ]; then __docker_complete_services fi else if [ "$cword" -eq "$counter" ]; then __docker_complete_images --repo --tag --id fi fi ;; esac } _docker_swarm() { local subcommands=" ca init join join-token leave unlock unlock-key update " __docker_subcommands "$subcommands" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_swarm_ca() { case "$prev" in --ca-cert|--ca-key) _filedir return ;; --cert-expiry|--external-ca) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--ca-cert --ca-key --cert-expiry --detach -d --external-ca --help --quiet -q --rotate" -- "$cur" ) ) ;; esac } _docker_swarm_init() { case "$prev" in --advertise-addr) if [[ $cur == *: ]] ; then COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) else __docker_complete_local_interfaces __docker_nospace fi return ;; --availability) COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) return ;; --cert-expiry|--data-path-port|--default-addr-pool|--default-addr-pool-mask-length|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit ) return ;; --data-path-addr) __docker_complete_local_interfaces return ;; --listen-addr) if [[ $cur == *: ]] ; then COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) else __docker_complete_local_interfaces --add 0.0.0.0 __docker_nospace fi return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--advertise-addr --autolock --availability --cert-expiry --data-path-addr --data-path-port --default-addr-pool --default-addr-pool-mask-length --dispatcher-heartbeat --external-ca --force-new-cluster --help --listen-addr --max-snapshots --snapshot-interval --task-history-limit " -- "$cur" ) ) ;; esac } _docker_swarm_join() { case "$prev" in --advertise-addr) if [[ $cur == *: ]] ; then COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) else __docker_complete_local_interfaces __docker_nospace fi return ;; --availability) COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) return ;; --data-path-addr) __docker_complete_local_interfaces return ;; --listen-addr) if [[ $cur == *: ]] ; then COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) else __docker_complete_local_interfaces --add 0.0.0.0 __docker_nospace fi return ;; --token) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--advertise-addr --availability --data-path-addr --help --listen-addr --token" -- "$cur" ) ) ;; *:) COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) ;; esac } _docker_swarm_join_token() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --quiet -q --rotate" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag ) if [ "$cword" -eq "$counter" ]; then COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) ) fi ;; esac } _docker_swarm_leave() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; esac } _docker_swarm_unlock() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; esac } _docker_swarm_unlock_key() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --quiet -q --rotate" -- "$cur" ) ) ;; esac } _docker_swarm_update() { case "$prev" in --cert-expiry|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--autolock --cert-expiry --dispatcher-heartbeat --external-ca --help --max-snapshots --snapshot-interval --task-history-limit" -- "$cur" ) ) ;; esac } _docker_manifest() { local subcommands=" annotate create inspect push rm " __docker_subcommands "$subcommands" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_manifest_annotate() { case "$prev" in --arch) COMPREPLY=( $( compgen -W " 386 amd64 arm arm64 mips64 mips64le ppc64le riscv64 s390x" -- "$cur" ) ) return ;; --os) COMPREPLY=( $( compgen -W " darwin dragonfly freebsd linux netbsd openbsd plan9 solaris windows" -- "$cur" ) ) return ;; --os-features|--variant) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--arch --help --os --os-features --variant" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag "--arch|--os|--os-features|--variant" ) if [ "$cword" -eq "$counter" ] || [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_images --force-tag --id fi ;; esac } _docker_manifest_create() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--amend -a --help --insecure" -- "$cur" ) ) ;; *) __docker_complete_images --force-tag --id ;; esac } _docker_manifest_inspect() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --insecure --verbose -v" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag ) if [ "$cword" -eq "$counter" ] || [ "$cword" -eq "$((counter + 1))" ]; then __docker_complete_images --force-tag --id fi ;; esac } _docker_manifest_push() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --insecure --purge -p" -- "$cur" ) ) ;; *) local counter=$( __docker_pos_first_nonflag ) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --force-tag --id fi ;; esac } _docker_manifest_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_images --force-tag --id ;; esac } _docker_node() { local subcommands=" demote inspect ls promote rm ps update " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_node_demote() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_nodes --filter role=manager esac } _docker_node_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) ;; *) __docker_complete_nodes --add self esac } _docker_node_list() { _docker_node_ls } _docker_node_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in id) __docker_complete_nodes --cur "${cur##*=}" --id return ;; label|node.label) return ;; membership) COMPREPLY=( $( compgen -W "accepted pending" -- "${cur##*=}" ) ) return ;; name) __docker_complete_nodes --cur "${cur##*=}" --name return ;; role) COMPREPLY=( $( compgen -W "manager worker" -- "${cur##*=}" ) ) return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -W "id label membership name node.label role" -S = -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_node_promote() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_nodes --filter role=worker esac } _docker_node_remove() { _docker_node_rm } _docker_node_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) __docker_complete_nodes esac } _docker_node_ps() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in desired-state) COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) return ;; name) __docker_complete_services --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -W "desired-state id label name" -S = -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --no-resolve --no-trunc --quiet -q" -- "$cur" ) ) ;; *) __docker_complete_nodes --add self ;; esac } _docker_node_update() { case "$prev" in --availability) COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) return ;; --role) COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) ) return ;; --label-add|--label-rm) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--availability --help --label-add --label-rm --role" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--availability|--label-add|--label-rm|--role') if [ "$cword" -eq "$counter" ]; then __docker_complete_nodes fi ;; esac } _docker_pause() { _docker_container_pause } _docker_plugin() { local subcommands=" create disable enable inspect install ls push rm set upgrade " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_plugin_create() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--compress --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then # reponame return elif [ "$cword" -eq "$((counter + 1))" ]; then _filedir -d fi ;; esac } _docker_plugin_disable() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_plugins_installed --filter enabled=true fi ;; esac } _docker_plugin_enable() { case "$prev" in --timeout) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --timeout" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--timeout') if [ "$cword" -eq "$counter" ]; then __docker_complete_plugins_installed --filter enabled=false fi ;; esac } _docker_plugin_inspect() { case "$prev" in --format|f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; *) __docker_complete_plugins_installed ;; esac } _docker_plugin_install() { case "$prev" in --alias) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--alias --disable --disable-content-trust=false --grant-all-permissions --help" -- "$cur" ) ) ;; esac } _docker_plugin_list() { _docker_plugin_ls } _docker_plugin_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in capability) COMPREPLY=( $( compgen -W "authz ipamdriver logdriver metricscollector networkdriver volumedriver" -- "${cur##*=}" ) ) return ;; enabled) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "capability enabled" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) ;; esac } _docker_plugin_push() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_plugins_installed fi ;; esac } _docker_plugin_remove() { _docker_plugin_rm } _docker_plugin_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) __docker_complete_plugins_installed ;; esac } _docker_plugin_set() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_plugins_installed fi ;; esac } _docker_plugin_upgrade() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--disable-content-trust --grant-all-permissions --help --skip-remote-check" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_plugins_installed __ltrim_colon_completions "$cur" elif [ "$cword" -eq "$((counter + 1))" ]; then local plugin_images="$(__docker_plugins_installed)" COMPREPLY=( $(compgen -S : -W "${plugin_images%:*}" -- "$cur") ) __docker_nospace fi ;; esac } _docker_port() { _docker_container_port } _docker_ps() { _docker_container_ls } _docker_pull() { _docker_image_pull } _docker_push() { _docker_image_push } _docker_rename() { _docker_container_rename } _docker_restart() { _docker_container_restart } _docker_rm() { _docker_container_rm } _docker_rmi() { _docker_image_rm } _docker_run() { _docker_container_run } _docker_save() { _docker_image_save } _docker_secret() { local subcommands=" create inspect ls rm " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_secret_create() { case "$prev" in --driver|-d|--label|-l) return ;; --template-driver) COMPREPLY=( $( compgen -W "golang" -- "$cur" ) ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--driver -d --help --label -l --template-driver" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--driver|-d|--label|-l|--template-driver') if [ "$cword" -eq "$((counter + 1))" ]; then _filedir fi ;; esac } _docker_secret_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) ;; *) __docker_complete_secrets ;; esac } _docker_secret_list() { _docker_secret_ls } _docker_secret_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in id) __docker_complete_secrets --cur "${cur##*=}" --id return ;; name) __docker_complete_secrets --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "id label name" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format --filter -f --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_secret_remove() { _docker_secret_rm } _docker_secret_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_secrets ;; esac } _docker_search() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in is-automated) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; is-official) COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "is-automated is-official stars" -- "$cur" ) ) __docker_nospace return ;; --format|--limit) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --limit --no-trunc" -- "$cur" ) ) ;; esac } _docker_stack() { local subcommands=" config deploy ls ps rm services " local aliases=" down list remove up " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_stack_config() { case "$prev" in --compose-file|-c) _filedir yml return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--compose-file -c --help --skip-interpolation" -- "$cur" ) ) ;; esac } _docker_stack_deploy() { case "$prev" in --compose-file|-c) _filedir yml return ;; --resolve-image) COMPREPLY=( $( compgen -W "always changed never" -- "$cur" ) ) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--compose-file -c --help --prune --resolve-image --with-registry-auth" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--compose-file|-c|--resolve-image') if [ "$cword" -eq "$counter" ]; then __docker_complete_stacks fi ;; esac } _docker_stack_down() { _docker_stack_rm } _docker_stack_list() { _docker_stack_ls } _docker_stack_ls() { case "$prev" in --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format --help" -- "$cur" ) ) ;; esac } _docker_stack_ps() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in desired-state) COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) return ;; id) __docker_complete_stacks --cur "${cur##*=}" --id return ;; name) __docker_complete_stacks --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "id name desired-state" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --no-resolve --no-trunc --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--filter|-f|--format') if [ "$cword" -eq "$counter" ]; then __docker_complete_stacks fi ;; esac } _docker_stack_remove() { _docker_stack_rm } _docker_stack_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) __docker_complete_stacks ;; esac } _docker_stack_services() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in id) __docker_complete_services --cur "${cur##*=}" --id return ;; label) return ;; name) __docker_complete_services --cur "${cur##*=}" --name return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "id label name" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag '--filter|-f|--format') if [ "$cword" -eq "$counter" ]; then __docker_complete_stacks fi ;; esac } _docker_stack_up() { _docker_stack_deploy } _docker_start() { _docker_container_start } _docker_stats() { _docker_container_stats } _docker_stop() { _docker_container_stop } _docker_system() { local subcommands=" df events info prune " __docker_subcommands "$subcommands" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_system_df() { case "$prev" in --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format --help --verbose -v" -- "$cur" ) ) ;; esac } _docker_system_events() { local key=$(__docker_map_key_of_current_option '-f|--filter') case "$key" in container) __docker_complete_containers_all --cur "${cur##*=}" return ;; daemon) local name=$(__docker_q info --format '{{.Info.Name}} {{.Info.ID}}') COMPREPLY=( $( compgen -W "$name" -- "${cur##*=}" ) ) return ;; event) COMPREPLY=( $( compgen -W " attach commit connect copy create delete destroy detach die disable disconnect enable exec_create exec_detach exec_die exec_start export health_status import install kill load mount oom pause pull push reload remove rename resize restart save start stop tag top unmount unpause untag update " -- "${cur##*=}" ) ) return ;; image) __docker_complete_images --cur "${cur##*=}" --repo --tag return ;; network) __docker_complete_networks --cur "${cur##*=}" return ;; node) __docker_complete_nodes --cur "${cur##*=}" return ;; scope) COMPREPLY=( $( compgen -W "local swarm" -- "${cur##*=}" ) ) return ;; type) COMPREPLY=( $( compgen -W "config container daemon image network node plugin secret service volume" -- "${cur##*=}" ) ) return ;; volume) __docker_complete_volumes --cur "${cur##*=}" return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "container daemon event image label network node scope type volume" -- "$cur" ) ) __docker_nospace return ;; --since|--until) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --help --since --until --format" -- "$cur" ) ) ;; esac } _docker_system_info() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; esac } _docker_system_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -W "label label! until" -S = -- "$cur" ) ) __docker_nospace return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --force -f --filter --help --volumes" -- "$cur" ) ) ;; esac } _docker_tag() { _docker_image_tag } _docker_trust() { local subcommands=" inspect revoke sign " __docker_subcommands "$subcommands" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_trust_inspect() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --pretty" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --repo --tag fi ;; esac } _docker_trust_revoke() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --yes -y" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --repo --tag fi ;; esac } _docker_trust_sign() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--help --local" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) if [ "$cword" -eq "$counter" ]; then __docker_complete_images --force-tag --id fi ;; esac } _docker_unpause() { _docker_container_unpause } _docker_update() { _docker_container_update } _docker_top() { _docker_container_top } _docker_version() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; esac } _docker_volume_create() { case "$prev" in --driver|-d) __docker_complete_plugins_bundled --type Volume return ;; --label|--opt|-o) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--driver -d --help --label --opt -o" -- "$cur" ) ) ;; esac } _docker_volume_inspect() { case "$prev" in --format|-f) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; *) __docker_complete_volumes ;; esac } _docker_volume_list() { _docker_volume_ls } _docker_volume_ls() { local key=$(__docker_map_key_of_current_option '--filter|-f') case "$key" in dangling) COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) ) return ;; driver) __docker_complete_plugins_bundled --cur "${cur##*=}" --type Volume return ;; name) __docker_complete_volumes --cur "${cur##*=}" return ;; esac case "$prev" in --filter|-f) COMPREPLY=( $( compgen -S = -W "dangling driver label name" -- "$cur" ) ) __docker_nospace return ;; --format) return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) ;; esac } _docker_volume_prune() { case "$prev" in --filter) COMPREPLY=( $( compgen -W "label label!" -S = -- "$cur" ) ) __docker_nospace return ;; esac case "$cur" in -*) COMPREPLY=( $( compgen -W "--all -a --filter --force -f --help" -- "$cur" ) ) ;; esac } _docker_volume_remove() { _docker_volume_rm } _docker_volume_rm() { case "$cur" in -*) COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) __docker_complete_volumes ;; esac } _docker_volume() { local subcommands=" create inspect ls prune rm " local aliases=" list remove " __docker_subcommands "$subcommands $aliases" && return case "$cur" in -*) COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) ;; esac } _docker_wait() { _docker_container_wait } _docker() { local previous_extglob_setting=$(shopt -p extglob) shopt -s extglob local management_commands=( builder config container context image manifest network node plugin secret service stack swarm system trust volume ) local top_level_commands=( build login logout run search version ) local legacy_commands=( attach commit cp create diff events exec export history images import info inspect kill load logs pause port ps pull push rename restart rm rmi save start stats stop tag top unpause update wait ) # Create completion functions for all registered plugins local known_plugin_commands=() local plugin_name="" for plugin_path in $(__docker_plugins_path); do plugin_name=$(basename "$plugin_path" | sed 's/ *$//') plugin_name=${plugin_name#docker-} plugin_name=${plugin_name%%.*} eval "_docker_${plugin_name}() { __docker_complete_plugin \"${plugin_path}\"; }" known_plugin_commands+=(${plugin_name}) done local experimental_server_commands=( checkpoint ) local commands=(${management_commands[*]} ${top_level_commands[*]} ${known_plugin_commands[*]}) [ -z "${DOCKER_HIDE_LEGACY_COMMANDS-}" ] && commands+=(${legacy_commands[*]}) # These options are valid as global options for all client commands # and valid as command options for `docker daemon` local global_boolean_options=" --debug -D --tls --tlsverify " local global_options_with_args=" --config --context -c --host -H --log-level -l --tlscacert --tlscert --tlskey " # variables to cache server info, populated on demand for performance reasons local info_fetched server_experimental server_os local host config context COMPREPLY=() local cur prev words cword _get_comp_words_by_ref -n : cur prev words cword local command='docker' command_pos=0 subcommand_pos local counter=1 while [ "$counter" -lt "$cword" ]; do case "${words[$counter]}" in docker) return 0 ;; # save host so that completion can use custom daemon --host|-H) (( counter++ )) host="${words[$counter]}" ;; # save config so that completion can use custom configuration directories --config) (( counter++ )) config="${words[$counter]}" ;; # save context so that completion can use custom daemon --context|-c) (( counter++ )) context="${words[$counter]}" ;; $(__docker_to_extglob "$global_options_with_args") ) (( counter++ )) ;; -*) ;; =) (( counter++ )) ;; *) command="${words[$counter]}" command_pos=$counter break ;; esac (( counter++ )) done local binary="${words[0]}" if [[ $binary == ?(*/)dockerd ]] ; then # for the dockerd binary, we reuse completion of `docker daemon`. # dockerd does not have subcommands and global options. command=daemon command_pos=0 fi local completions_func=_docker_${command//-/_} declare -F $completions_func >/dev/null && $completions_func eval "$previous_extglob_setting" return 0 } eval "$__docker_previous_extglob_setting" unset __docker_previous_extglob_setting complete -F _docker docker docker.exe dockerd dockerd.exe
Close