Files
vboxmanage-bash-completion/VBoxManage
2023-03-13 12:45:34 +01:00

2748 lines
112 KiB
Bash

# bash command-line completion for VBoxManage command
#
# Author: Roman 'gryf' Dobosz <gryf73@gmail.com>
# URL: https://bitbucket.org/gryf/vboxmanage-bash-completion
# URL: https://github.com/gryf/vboxmanage-bash-completion
# License: 3-clause BSD-style license (see LICENSE file)
# Version: 6.1.38
_VBoxManage() {
local cur prev opts cmd subcommand tmp items name index result
# env var GNUSED is either empty or points to a gnu sed executable
VBMC_SED=${GNUSED:-sed}
# Check the COMP_WORDS looking for name of the vm. If name contain space or
# is enclosed in quotes, glue name together in variable name. Variable index
# will hold the last index of COMP_WORDS array which contain the end of the
# name.
_find_item_name() {
local idx=$1
name=""
while true
do
name="${name}${COMP_WORDS[$idx]}"
[[ ${COMP_WORDS[$idx]} = *'"' ]] && break
if [[ ${COMP_WORDS[$idx]} = '"'* || ${COMP_WORDS[$idx]} = *'\ ' ]]
then
idx=$((++idx))
continue
fi
break
done
index=$idx
}
_get_excluded_items() {
local i
result=""
for i in $@; do
[[ " ${COMP_WORDS[@]} " == *" $i "* ]] && continue
result="$result $i"
done
}
_is_any_item_used() {
local i
result=""
for i in $@; do
if [[ " ${COMP_WORDS[@]} " == *" $i "* ]]; then
result="ITIS"
break
fi
done
}
# Generate registered hard disk files.
# NOTE: This function may introduce some quirks, if there is a space or
# other characters which usually are treated as IFS - like space. Pipe
# character used in disk filename will ruin this completions.
_hdd_comp() {
local hdds
local item
hdds=$(VBoxManage list hdds | \
grep -A 1 'normal (base)' | \
grep "Location:" | \
$VBMC_SED 's/Location:\s\+//' | \
$VBMC_SED 's/\s/\\ /g' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra hdds <<< "$hdds"
for item in "${hdds[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_floppy_comp() {
local floppies
local item
floppies=$(VBoxManage list floppies | \
grep "Location:" | \
$VBMC_SED 's/Location:\s\+//' | \
$VBMC_SED 's/\s/\\ /g' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra floppies <<< "$floppies"
for item in "${floppies[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_dvds_comp() {
local dvds
local item
dvds=$(VBoxManage list dvds | \
grep "Location:" | \
$VBMC_SED 's/Location:\s\+//' | \
$VBMC_SED 's/\s/\\ /g' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra dvds <<< "$dvds"
for item in "${dvds[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
# Complete registered VM names.
# Issues are the same as in above function.
_vms_comp() {
local command=$1
local exclude_running=false
local vms
local running_vms
local item
compopt -o filenames
if [[ $# == 2 ]]
then
exclude_running=true
running_vms=$(VBoxManage list runningvms | \
awk -F ' {' '{ print $1 }' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/"//g')
IFS='|' read -ra running_vms <<< "$running_vms"
fi
vms=$(VBoxManage list $command | \
awk -F ' {' '{ print $1 }' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/"//g')
IFS='|' read -ra vms <<< "$vms"
for item in "${vms[@]}"
do
if $exclude_running
then
_is_in_array "$item" "${running_vms[@]}"
[[ $? == 0 ]] && continue
fi
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_vms_state_comp() {
local vms
local item
compopt -o filenames
vms=$(VBoxManage list vms -l | \
egrep '^Name|State' | \
egrep -B1 'State:\s+saved' | \
grep Name |$VBMC_SED 's/Name:\s\+//' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/"//g')
IFS='|' read -ra vms <<< "$vms"
for item in "${vms[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_group_comp() {
local list
local item
list=$(VBoxManage list groups | \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/\s/\\ /g'| \
$VBMC_SED 's/"//g')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_os_comp() {
local list
local item
list=$(VBoxManage list ostypes | \
egrep ^ID: | \
$VBMC_SED 's/ID:\s\+//' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_dhcp_comp() {
local list
local item
list=$(VBoxManage list dhcpservers | \
grep NetworkName: | \
$VBMC_SED 's/NetworkName:\s\+//' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_hostonlyif_comp() {
local list
local item
list=$(VBoxManage list hostonlyifs | \
egrep ^Name: | \
$VBMC_SED 's/Name:\s\+//' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_bandwidthctl_comp() {
local rules
local item
_find_item_name 2
rules=$(VBoxManage bandwidthctl "${name//\\/}" \
list --machinereadable | \
awk -F ',' '{print $1}' | \
awk -F '=' '{print $2}' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/\s/\\ /g')
IFS='|' read -ra rules <<< "$rules"
for item in "${rules[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_snapshot_comp() {
local snap
local item
_find_item_name 2
snap=$(VBoxManage snapshot "${name//\\/}" \
list | \
grep UUID |
awk -F ': *' -v ORS='|' '/UUID: / {
n=$2; u=$3
sub(/..UUID/, "", n)
gsub(/ /, "\\ ", n);
sub(/[)].*/, "", u)
print n; print u
}'
)
IFS='|' read -ra snap <<< "$snap"
for item in "${snap[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_webcam_comp() {
local devs
local item
_find_item_name 2
devs=$(VBoxManage controlvm "${name//\\/}" \
webcam list | \
tr '\n' ' ' | \
$VBMC_SED 's/|s$//')
read -ra devs <<< "$devs"
for item in "${devs[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_webcam_avail_comp() {
local devs
local item
_find_item_name 2
devs=$(VBoxManage list webcams | \
grep dev | \
tr '\n' ' ' | \
$VBMC_SED 's/|s$//')
read -ra devs <<< "$devs"
for item in "${devs[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_list_comp() {
local list
list=$(VBoxManage list | $VBMC_SED -e '1,2d' \
-e 's/VBoxManage list //' \
-e 's/[\[\]\|]/ /g' \
-e 's/|/ /g'|xargs echo)
COMPREPLY=( $(compgen -W "$list" -- ${cur}) )
}
_sharedfolder_comp() {
local vm="$@"
local folders
local item
folders=$(VBoxManage showvminfo ${vm} --machinereadable | \
grep SharedFolderName | \
awk -F= '{print $2}' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//' | \
$VBMC_SED 's/"//g')
IFS='|' read -ra folders <<< "$folders"
for item in "${folders[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_natnet_comp() {
local list
local item
list=$(VBoxManage list natnets | \
grep NetworkName: | \
$VBMC_SED 's/NetworkName:\s\+//' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_bridgedif_comp() {
local list
local item
list=$(VBoxManage list bridgedifs | \
egrep ^Name: | \
$VBMC_SED 's/Name:\s\+//' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_intnet_comp() {
local list
local item
list=$(VBoxManage list intnets| \
egrep ^Name: | \
$VBMC_SED 's/Name:\s\+//' | \
$VBMC_SED 's/\s/\\ /g'| \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra list <<< "$list"
for item in "${list[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_is_in_array() {
local element
for element in "${@:2}"
do
[[ "$element" == "$1" ]] && return 0
done
return 1
}
# search for the word before current one, and try to match apropriate item
# to be displayed
# for example:
# foo bar disk baz
# will search for word disk.
_get_medium () {
case "${COMP_WORDS[COMP_CWORD-2]}" in
disk)
_hdd_comp
;;
dvd)
_dvds_comp
;;
floppy)
_floppy_comp
;;
esac
}
_cloudproviders_comp() {
local providers
local item
providers=$(VBoxManage list cloudproviders | \
grep "Short Name:" | \
$VBMC_SED 's/Short Name:\s\+//' | \
$VBMC_SED 's/\s/\\ /g' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra providers <<< "$providers"
for item in "${providers[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
_cloudprofiles_comp() {
local profiles
local item
profiles=$(VBoxManage list cloudprofiles | \
grep "Name:" | \
$VBMC_SED 's/Name:\s\+//' | \
$VBMC_SED 's/\s/\\ /g' | \
tr '\n' '|' | \
$VBMC_SED 's/|$//')
IFS='|' read -ra profiles <<< "$profiles"
for item in "${profiles[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
}
COMP_WORDBREAKS=${COMP_WORDBREAKS//|/} # remove pipe from comp word breaks
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ COMP_CWORD -ge 2 ]]; then
cmd="${COMP_WORDS[1]}"
if [[ $cmd == "-q" ]]; then
cmd="${COMP_WORDS[2]}"
fi
fi
# all possible commands for the VBoxManage. Starting from VirtualBox 7.x all
# commands are listed as ` VBoxManage commandname ` in a help.
opts=$(VBoxManage -q help | \
grep VBoxManage | \
awk '{print $2}'| \
grep -v '\[' | \
sort | \
uniq)
if [[ ${cur} == "-q" || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
case "${cmd}" in
adoptstate)
_find_item_name 2
COMPREPLY=()
[[ -z "${name}" ]] &&
_vms_state_comp
;;
bandwidthctl)
local items=(add set remove list)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_find_item_name 2
subcommand=${COMP_WORDS[$((index+1))]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
add)
items=(--type --limit)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
set)
if [[ ${prev} == "set" ]]; then
_bandwidthctl_comp
else
[[ " ${COMP_WORDS[@]} " != *" --limit "* ]] && \
COMPREPLY=( $(compgen -W "--limit" -- \
${cur}) )
fi
;;
remove)
if [[ ${prev} == "remove" ]]; then
_bandwidthctl_comp
fi
;;
list)
if [[ ${prev} == "list" ]]; then
COMPREPLY=( $(compgen -W "--machinereadable" \
-- ${cur}) )
fi
;;
esac
case "${prev}" in
--type)
COMPREPLY=( $(compgen -W "disk network" -- ${cur}) )
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
fi
;;
checkmediumpwd)
if [[ ${prev} == ${cmd} ]]; then
_hdd_comp
_floppy_comp
_dvds_comp
fi
;;
clonemedium)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
else
case "${prev}" in
disk)
_hdd_comp
;;
dvd)
_dvds_comp
;;
floppy)
_floppy_comp
;;
*)
_find_item_name 2
items=(--format --variant --existing)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--format)
COMPREPLY=( $(compgen -W "VDI VMDK VHD RAW" --\
${cur}) )
;;
--variant)
COMPREPLY=( $(compgen -W "Standard Fixed Split2G
Stream ESX" -- ${cur}) )
;;
esac
;;
esac
fi
;;
clonevm)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_find_item_name 2
items=( --basefolder --groups --mode --name --options --register
--snapshot --uuid )
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--snapshot)
COMPREPLY=()
_snapshot_comp
;;
--mode)
COMPREPLY=( $(compgen -W "machine machineandchildren
all" -- ${cur}) )
;;
--options)
COMPREPLY=( $(compgen -W "Link KeepAllMACs KeepNATMACs
KeepDiskNames KeepHwUUIDs" -- ${cur}) )
;;
--groups)
COMPREPLY=()
_group_comp
;;
--basefolder)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
esac
fi
;;
closemedium)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
_hdd_comp
_dvds_comp
_floppy_comp
else
case "${prev}" in
disk)
_hdd_comp
;;
dvd)
_dvds_comp
;;
floppy)
_floppy_comp
;;
*)
items=(--delete)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
fi
;;
cloudprofile)
if [[ " ${COMP_WORDS[@]} " != *" --provider"* ||
" ${COMP_WORDS[@]} " != *" --profile"* ]]; then
items=(--provider --profile)
else
[[ " ${COMP_WORDS[@]} " != *" add"* &&
" ${COMP_WORDS[@]} " != *" update"* &&
" ${COMP_WORDS[@]} " != *" delete"* &&
" ${COMP_WORDS[@]} " != *" show"* ]] &&
items=(add update delete show)
fi
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--provider)
COMPREPLY=()
_cloudproviders_comp
;;
--profile)
COMPREPLY=()
_cloudprofiles_comp
;;
esac
if [[ " ${COMP_WORDS[@]} " == *" add"* ||
" ${COMP_WORDS[@]} " == *" update"* ]]; then
COMPREPLY=( $(compgen -W "--clouduser --fingerprint --keyfile
--passphrase --tenancy --compartment" -- ${cur}) )
fi
;;
cloud)
if [ "${prev}" == "cloud" ]; then
items=(--provider --profile network)
elif [[ " ${COMP_WORDS[@]} " == *" network"* ]]; then
items=(update delete info)
elif [[ " ${COMP_WORDS[@]} " != *" --provider"* ||
" ${COMP_WORDS[@]} " != *" --profile"* ]]; then
items=(--provider --profile)
else
[[ " ${COMP_WORDS[@]} " != *" list"* &&
" ${COMP_WORDS[@]} " != *" instance"* &&
" ${COMP_WORDS[@]} " != *" network"* &&
" ${COMP_WORDS[@]} " != *" image"* ]] &&
items=(list instance image network)
fi
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--provider)
COMPREPLY=()
_cloudproviders_comp
;;
--profile)
COMPREPLY=()
_cloudprofiles_comp
;;
list)
COMPREPLY=( $(compgen -W "instances images" -- ${cur}) )
;;
instance)
COMPREPLY=( $(compgen -W "create info terminate start
pause" -- ${cur}) )
;;
image)
COMPREPLY=( $(compgen -W "create info delete import
export" -- ${cur}) )
;;
network) # TODO: differentiate between setup/create and update/delete/info
if [[ " ${COMP_WORDS[@]} " == *" --provider"* ]]; then
COMPREPLY=( $(compgen -W "setup create" -- ${cur}) )
fi
;;
esac
if [[ " ${COMP_WORDS[@]} " == *" list images"* ]]; then
items=(--state --compartment-id)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" instance create"* ]]; then
items=( --domain-name --display-name --shape --subnet
--publicip --boot-disk-size --privateip --public-ssh-key
--launch-mode --cloud-init-script-path )
[[ " ${COMP_WORDS[@]} " != *" --image-id"* &&
" ${COMP_WORDS[@]} " != *" --boot-volume-id"* ]] &&
items+=(--image-id --boot-volume-id)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--publicip)
COMPREPLY=( $(compgen -W "true false" -- ${cur}) )
;;
--launch-mode)
COMPREPLY=( $(compgen -W "NATIVE EMULATED
PARAVIRTUALIZED" -- ${cur}) )
;;
esac
fi
if [[ " ${COMP_WORDS[@]} " == *" instance info"* ||
" ${COMP_WORDS[@]} " == *" instance terminate"* ||
" ${COMP_WORDS[@]} " == *" instance start"* ||
" ${COMP_WORDS[@]} " == *" instance pause"* ]]; then
COMPREPLY=( $(compgen -W "--id" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" image create"* ]]; then
items=(--display-name --bucket-name --object-name --instance-id)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" image info"* ||
" ${COMP_WORDS[@]} " == *" image delete"* ]]; then
COMPREPLY=( $(compgen -W "--id" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" image import"* ]]; then
COMPREPLY=( $(compgen -W "--id --bucket-name
--object-name" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" image export"* ]]; then
COMPREPLY=( $(compgen -W "--id --display-name --bucket-name
--object-name" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" network setup"* ]]; then
items=( --local-gateway-iso --gateway-os-name
--gateway-os-version --gateway-shape --tunnel-network-name
--tunnel-network-range --guest-additions-iso --proxy
--compartment-id )
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" network create"* ]]; then
items=( --name --network-id )
[[ " ${COMP_WORDS[@]} " != *" --enable"* &&
" ${COMP_WORDS[@]} " != *" --disable"* ]] &&
items+=(--enable --disable)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" network update"* ]]; then
items=( --name --network-id )
[[ " ${COMP_WORDS[@]} " != *" --enable"* &&
" ${COMP_WORDS[@]} " != *" --disable"* ]] &&
items+=(--enable --disable)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
if [[ " ${COMP_WORDS[@]} " == *" network info"* ||
" ${COMP_WORDS[@]} " == *" network delete"* ]]; then
COMPREPLY=( $(compgen -W "--name" -- ${cur}) )
fi
;;
controlvm)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp runningvms
else
local items=(acpipowerbutton acpisleepbutton clipboard
cpuexecutioncap draganddrop guestmemoryballoon
keyboardputscancode natpf1 nic1 nicpromisc1 nicproperty1
nictrace1 nictracefile1 natpf2 nic2 nicpromisc2 nicproperty2
nictrace2 nictracefile2 natpf3 nic3 nicpromisc3 nicproperty3
nictrace3 nictracefile3 natpf4 nic4 nicpromisc4 nicproperty4
nictrace4 nictracefile4 natpf5 nic5 nicpromisc5 nicproperty5
nictrace5 nictracefile5 natpf6 nic6 nicpromisc6 nicproperty6
nictrace6 nictracefile6 natpf7 nic7 nicpromisc7 nicproperty7
nictrace7 nictracefile7 natpf8 nic8 nicpromisc8 nicproperty8
nictrace8 pause plugcpu poweroff reset resume savestate
screenshotpng setcredentials setlinkstate1 setlinkstate2
setlinkstate3 setlinkstate4 setlinkstate5 setlinkstate6
setlinkstate7 setlinkstate8 setvideomodehint teleport unplugcpu
usbattach usbdetach vrde vrdeport vrdeproperty
vrdevideochannelquality webcam recording addencpassword
removeencpassword removeallencpasswords keyboardputstring
keyboardputfile audioin audioout setscreenlayout changeuartmode1
changeuartmode2 vm-process-priority)
_find_item_name 2
subcommand=${COMP_WORDS[$((index+1))]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
keyboardputfile|nictracefile[1-8])
[[ ${prev} == "nictracefile"* ]] && \
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
nictrace[1-8])
[[ ${prev} == "nictrace"* ]] && \
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
nicpromisc[1-8])
[[ ${prev} == "nicpromisc"* ]] && \
COMPREPLY=( $(compgen -W "deny allow-vms
allow-all" -- ${cur}) )
;;
nic[1-8])
[[ ${prev} == "nic"* ]] && \
COMPREPLY=( $(compgen -W "null nat bridged intnet
hostonly generic natnetwork" -- ${cur}) )
;;
natpf[1-8])
[[ ${prev} == "natpf"* ]] && \
COMPREPLY=( $(compgen -W "delete tcp
udp" -- ${cur}) )
;;
audioin|audioout|setlinkstate[1-8])
[[ ${prev} == "setlinkstate"* ]] && \
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
clipboard)
[[ ${prev} == "clipboard" ]] && \
COMPREPLY=( $(compgen -W "disabled hosttoguest
guesttohost bidirectional" -- ${cur}) )
;;
draganddrop)
[[ ${prev} == "draganddrop" ]] && \
COMPREPLY=( $(compgen -W "disabled hosttoguest
guesttohost bidirectional" -- ${cur}) )
;;
vrde)
[[ ${prev} == "vrde" ]] && \
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
recording)
[[ ${prev} == "recording" ]] && \
COMPREPLY=( $(compgen -W "on off screens
filename videores videorate videofps maxtime
maxfilesize" -- ${cur}) )
case "${prev}" in
screens)
COMPREPLY=( $(compgen -W "all none
<screen>" -- ${cur}) )
;;
filename)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
;;
videocapscreens)
[[ ${prev} == "videocapscreens" ]] && \
COMPREPLY=( $(compgen -W "all none" -- ${cur}) )
;;
setcredentials)
tmp=(--passwordfile --allowlocallogon)
_get_excluded_items "${tmp[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
teleport)
tmp=(--host --port --maxdowntime --passwordfile
--password)
_get_excluded_items "${tmp[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
webcam)
[[ ${prev} == "webcam" ]] && \
COMPREPLY=( $(compgen -W "attach detach
list" -- ${cur}) )
[[ ${prev} == "detach" ]] && \
_webcam_comp
[[ ${prev} == "attach" ]] && \
_webcam_avail_comp
;;
usbattach)
tmp=(--capturefile)
_get_excluded_items "${tmp[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
--removeonsuspend)
COMPREPLY=( $(compgen -W "yes no" -- ${cur}) )
;;
addencpassword)
tmp=(--host --port --maxdowntime --passwordfile
--password)
_get_excluded_items "${tmp[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
changeuartmode[1-2])
tmp=(disconnected server client tcpserver tcpclient
file "<devicename>")
_get_excluded_items "${tmp[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
vm-process-priority)
COMPREPLY=( $(compgen -W "default flat low normal
high" -- ${cur}) )
;;
esac
elif [[ ${prev} == "--passwordfile" || ${prev} == "--capturefile" ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
fi
;;
convertfromraw)
local items=(--format --variant --uuid)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
else
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--format)
COMPREPLY=( $(compgen -W "VDI VMDK VHD" -- ${cur}) )
;;
--variant)
COMPREPLY=( $(compgen -W "Standard Fixed Split2G Stream
ESX" -- ${cur}) )
;;
esac
fi
;;
createmedium)
items=(--filename --size --sizebyte --diffparent --format --variant)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
else
case "${prev}" in
disk|dvd|floppy)
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
;;
*)
[[ " ${COMP_WORDS[@]} " == *" --size "* ||
" ${COMP_WORDS[@]} " == *" --sizebyte "* ]] &&
items=(--filename --diffparent --format --variant)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--filename)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
--diffparent)
COMPREPLY=()
_hdd_comp
;;
--format)
COMPREPLY=( $(compgen -W "VDI VMDK VHD" --\
${cur}) )
;;
--variant)
COMPREPLY=( $(compgen -W "Standard Fixed Split2G
Stream ESX Formatted" -- ${cur}) )
;;
esac
;;
esac
fi
;;
createvm)
items=( --basefolder --ciphercipher --default --group --name --ostype
--password-idpassword-id --passwordfile --register --uuid )
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
else
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--group)
COMPREPLY=()
_group_comp
;;
--ostype)
COMPREPLY=()
_os_comp
;;
--basefolder)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
--passwordfile)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
fi
;;
"debugvm")
items=(dumpguestcore info injectnmi log logdest logflags osdetect
osinfo osdmesg getregisters setregisters show statistics stack)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp runningvms
else
_find_item_name 2
subcommand=${COMP_WORDS[$((index+1))]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
dumpguestcore)
_get_excluded_items "--filename"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
log|logdest|logflags)
items=(--release --debug)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
getregisters|setregisters|stack)
_get_excluded_items "--cpu"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
show)
items=(--human-readable --sh-export --sh-eval
--cmd-set)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
statistics)
items=(--reset --pattern --descriptions)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
osdmesg)
items=()
[[ " ${COMP_WORDS[@]} " != *" --lines "* &&
" ${COMP_WORDS[@]} " != *" -n "* ]] &&
items+=(--lines -n)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
COMPREPLY+=( $(compgen -W "$result" -- ${cur}) )
else
[[ "${prev}" == "--filename" ]] && \
COMPREPLY=( $(compgen -f -- ${cur}) )
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
fi
;;
dhcpserver)
items=(add modify remove restart findlease)
subcommand=${COMP_WORDS[2]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
add)
items=(--server-ip --netmask --lower-ip --upper-ip)
[[ " ${COMP_WORDS[@]} " != *" --interface"* &&
" ${COMP_WORDS[@]} " != *" --network"* ]] &&
items+=(--network --interface)
[[ " ${COMP_WORDS[@]} " != *" --enable"* &&
" ${COMP_WORDS[@]} " != *" --disable"* ]] &&
items+=(--enable --disable)
[[ " ${COMP_WORDS[@]} " == *" --options"* ]] &&
items+=(--vm --nic --id --value --remove)
[[ " ${COMP_WORDS[@]} " != *" --global"* &&
" ${COMP_WORDS[@]} " != *" --group"* &&
" ${COMP_WORDS[@]} " != *" --vm"* &&
" ${COMP_WORDS[@]} " != *" --mac-address"* ]] &&
items+=(--global --group --vm --mac-address)
[[ " ${COMP_WORDS[@]} " == *" --global"* ]] &&
items+=(--set-opt --set-opt-hex --force-opt
--supress-opt --min-lease-time --default-lease-time
--max-lease-time)
[[ " ${COMP_WORDS[@]} " == *" --group"* ]] &&
items+=(--set-opt --set-opt-hex --force-opt
--supress-opt --incl-mac --excl-mac --incl-mac-wild
--excl-mac-wild --incl-vendor --excl-vendor
--incl-vendor-wild --excl-vendor-wild --incl-user
--excl-user --incl-user-wild --excl-user-wild
--min-lease-time --default-lease-time
--max-lease-time)
[[ " ${COMP_WORDS[@]} " == *" --vm"* ]] &&
items+=(--nic --set-opt --set-opt-hex --force-opt
--supress-opt --min-lease-time --default-lease-time
--max-lease-time --fixed-address)
[[ " ${COMP_WORDS[@]} " == *" --mac-address"* ]] &&
items+=(--set-opt --set-opt-hex --force-opt
--supress-opt --min-lease-time --default-lease-time
--max-lease-time --fixed-address)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
modify)
items=(--server-ip --netmask --lower-ip --upper-ip)
[[ " ${COMP_WORDS[@]} " != *" --interface"* &&
" ${COMP_WORDS[@]} " != *" --network"* ]] &&
items+=(--network --interface)
[[ " ${COMP_WORDS[@]} " != *" --enable"* &&
" ${COMP_WORDS[@]} " != *" --disable"* ]] &&
items+=(--enable --disable)
[[ " ${COMP_WORDS[@]} " == *" --options"* ]] &&
items+=(--vm --nic --id --value --remove)
[[ " ${COMP_WORDS[@]} " != *" --global"* &&
" ${COMP_WORDS[@]} " != *" --group"* &&
" ${COMP_WORDS[@]} " != *" --vm"* &&
" ${COMP_WORDS[@]} " != *" --mac-address"* ]] &&
items+=(--global --group --vm --mac-address)
[[ " ${COMP_WORDS[@]} " == *" --global"* ]] &&
items+=(--del-opt --set-opt --set-opt-hex --force-opt
--unforce-opt --supress-opt --unsupress-opt
--min-lease-time --default-lease-time
--max-lease-time --remove-config)
[[ " ${COMP_WORDS[@]} " == *" --group"* ]] &&
items+=(--set-opt-hex --force-opt --unforce-opt
--supress-opt --unsupress-opt --del-mac --incl-mac
--excl-mac --del-mac-wild --incl-mac-wild
--excl-mac-wild --del-vendor --incl-vendor
--excl-vendor --del-vendor-wild --incl-vendor-wild
--excl-vendor-wild --del-user --incl-user
--excl-user --del-user-wild --incl-user-wild
--excl-user-wild --zap-conditions --min-lease-time
--default-lease-time --max-lease-time
--remove-config)
[[ " ${COMP_WORDS[@]} " == *" --vm"* ]] &&
items+=(--del-opt --set-opt --set-opt-hex --force-opt
--unforce-opt --supress-opt --unsupress-opt
--min-lease-time --default-lease-time
--max-lease-time --fixed-address --remove-config)
[[ " ${COMP_WORDS[@]} " == *" --mac-address"* ]] &&
items+=(--set-opt --set-opt-hex --force-opt
--unforce-opt --supress-opt --unsupress-opt
--min-lease-time --default-lease-time
--max-lease-time --fixed-address --remove-config)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
remove|restart)
case "${prev}" in
--network)
COMPREPLY=()
_dhcp_comp
;;
--interface)
COMPREPLY=()
_hostonlyif_comp
;;
esac
if [[ " ${COMP_WORDS[@]} " != *" --interface"* &&
" ${COMP_WORDS[@]} " != *" --network"* ]]; then
items=(--network --interface)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
findlease)
items=(--mac-address)
case "${prev}" in
--network)
COMPREPLY=()
_dhcp_comp
;;
--interface)
COMPREPLY=()
_hostonlyif_comp
;;
esac
if [[ " ${COMP_WORDS[@]} " != *" --interface"* &&
" ${COMP_WORDS[@]} " != *" --network"* ]]; then
items+=(--network --interface)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
discardstate)
_find_item_name 2
COMPREPLY=()
[[ -z "${name}" ]] &&
_vms_state_comp
;;
encryptmedium)
if [[ ${prev} == ${cmd} ]]; then
_hdd_comp
_floppy_comp
_dvds_comp
else
COMPREPLY=( $(compgen -W "--newpassword --oldpassword --cipher
--newpasswordid" -- ${cur}) )
fi
;;
"export")
items=( --manifest --options --vsys --cloud --cloudinitscriptpath )
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
elif [[ ${prev} == "--eulafile" ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
elif [[ ${prev} == "--cloudkeepobject" ||
${prev} == "--cloudlaunchinstance" ||
${prev} == "--cloudpublicip" ]]; then
COMPREPLY=( $(compgen -W "true false" -- ${cur}) )
else
[[ " ${COMP_WORDS[@]} " != *" -o "* &&
" ${COMP_WORDS[@]} " != *" --output "* ]] &&
items+=(-o --output)
[[ " ${COMP_WORDS[@]} " != *" --legacy09 "* &&
" ${COMP_WORDS[@]} " != *" --ovf09 "* &&
" ${COMP_WORDS[@]} " != *" --ovf10 "* &&
" ${COMP_WORDS[@]} " != *" --ovf20 "* &&
" ${COMP_WORDS[@]} " != *" --opc20 "* ]] &&
items+=(--legacy09 --ovf09 --ovf10 --ovf20 --opc10)
[[ " ${COMP_WORDS[@]} " == *" --vsys "* ]] &&
items+=(--product --producturl --vendor --vendorurl
--version --description --eula --eulafile --vmname)
[[ " ${COMP_WORDS[@]} " == *" --cloud"* ]] &&
items+=(--vmname --cloudprofile --cloudshape --clouddomain
--clouddisksize --cloudbucket --cloudocivcn --cloudocisubnet
--cloudkeepobject --cloudlaunchinstance --cloudpublicip
--cloudprivateip --cloudlaunchmode --cloudinitscriptpath )
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--options)
COMPREPLY=( $(compgen -W "manifest iso nomacs
nomacsbutnat" -- ${cur}) )
;;
--cloudlaunchmode)
COMPREPLY=( $(compgen -W "EMULATED PARAVIRTUALIZED" \
-- ${cur}) )
;;
esac
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
extpack)
items=(install uninstall cleanup)
subcommand=${COMP_WORDS[2]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
install)
_get_excluded_items "--replace --accept-license"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
uninstall)
_get_excluded_items "--force"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
cleanup)
COMPREPLY=()
;;
--replace)
COMPREPLY=()
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
getextradata)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "global" -- ${cur}) )
_vms_comp vms
else
_get_excluded_items "enumerate"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
guestcontrol)
local items=(run start copyfrom copyto mkdir createdir
createdirectory rmdir removedir removedirectory removefile rm mv
move ren rename mktemp createtemp createtemporary stat list
closeprocess closesession updatega updateguestadditions
updateadditions watch)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp runningvms
else
_find_item_name 2
subcommand=${COMP_WORDS[$((index+1))]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
run)
items=(--exe --timeout --unquoted-args
--ignore-operhaned-processes --profile
--dos2unix --unix2dos --username --domain --)
[[ " ${COMP_WORDS[@]} " != *" --password "* ||
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --putenv "* &&
" ${COMP_WORDS[@]} " != *" -E "* ]] &&
items+=(--putenv -E)
[[ " ${COMP_WORDS[@]} " != *" --no-wait-stdout "* &&
" ${COMP_WORDS[@]} " != *" --wait-stdout "* ]] &&
items+=(--no-wait-stdout --wait-stdout)
[[ " ${COMP_WORDS[@]} " != *" --no-wait-stderr"* &&
" ${COMP_WORDS[@]} " != *" --wait-stderr "* ]] &&
items+=(--no-wait-stderr --wait-stderr)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
compreply=( $(compgen -w "$result" -- ${cur}) )
;;
start)
items=(--exe --timeout --unquoted-args
--ignore-operhaned-processes --profile
--username --domain --passwordfile --password --)
[[ " ${COMP_WORDS[@]} " != *" --password "* ||
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
compreply=( $(compgen -w "$result" -- ${cur}) )
;;
copyfrom|copyto)
items=(--follow --target-directory --username
--domain)
[[ " ${COMP_WORDS[@]} " != *" --recursive "* &&
" ${COMP_WORDS[@]} " != *" -R "* ]] &&
items+=(--recursive -R)
[[ " ${COMP_WORDS[@]} " != *" --password "* ||
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
createdirectory|createdir|mkdir)
items=(--parents --mode --username --domain)
[[ " ${COMP_WORDS[@]} " != *" --password "* ||
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
removedir|removedirectory|rmdir)
items=(--username --domain)
[[ " ${COMP_WORDS[@]} " != *" --password "* &&
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --recursive "* &&
" ${COMP_WORDS[@]} " != *" -R "* ]] &&
items+=(--recursive -R)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
removefile|rm)
items=(--username --domain)
[[ " ${COMP_WORDS[@]} " != *" --force "* &&
" ${COMP_WORDS[@]} " != *" -f "* ]] &&
items+=(--force -f)
[[ " ${COMP_WORDS[@]} " != *" --password "* &&
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
rename|ren|move|mv)
items=(--username --domain)
[[ " ${COMP_WORDS[@]} " != *" --password "* &&
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
createtemporary|createtemp|mktemp)
items=(--username --domain --secure --tmpdir --mode)
[[ " ${COMP_WORDS[@]} " != *" --password "* &&
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
list)
items=()
[[ " ${COMP_WORDS[@]} " != *" all "* &&
" ${COMP_WORDS[@]} " != *" sessions "* &&
" ${COMP_WORDS[@]} " != *" processes "* &&
" ${COMP_WORDS[@]} " != *" files "* ]] &&
items+=(all sessions processes files)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
closeprocess)
items=()
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
[[ " ${COMP_WORDS[@]} " != *" --session-id "* ]] &&
items+=(--session-name)
[[ " ${COMP_WORDS[@]} " != *" --session-name "* ]] &&
items+=(--session-id)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
closesession)
items=()
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
[[ " ${COMP_WORDS[@]} " != *" --session-id "* &&
" ${COMP_WORDS[@]} " != *" --session-name "* &&
" ${COMP_WORDS[@]} " != *" --all "* ]] &&
items+=(--session-id --session-name --all)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
process)
if [[ " ${COMP_WORDS[@]} " == *" process kill "* ]];
then
items=(--verbose)
[[ " ${COMP_WORDS[@]} " != *" --session-name "* &&
" ${COMP_WORDS[@]} " != *" --session-id "* ]] &&
items+=(--session-id --session-name)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
else
_get_excluded_items "kill"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
stat)
if [[ "${cur}" == "stat" ]]; then
COMPREPLY=( $(compgen -- ${cur}) )
else
items=(--username --domain --verbose)
[[ " ${COMP_WORDS[@]} " != *" --password "* &&
" ${COMP_WORDS[@]} " != *" --passwordfile "* ]] &&
items+=(--passwordfile --password)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
updatega|updateguestadditions|updateadditions)
items=(--source --wait-start)
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
watch)
items=()
[[ " ${COMP_WORDS[@]} " != *" --verbose "* &&
" ${COMP_WORDS[@]} " != *" -v "* ]] &&
items+=(--verbose -v)
[[ " ${COMP_WORDS[@]} " != *" --quiet "* &&
" ${COMP_WORDS[@]} " != *" -q "* ]] &&
items+=(--quiet -q)
_get_excluded_items "--verbose"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
case "${prev}" in
close)
items=(--verbose)
[[ " ${COMP_WORDS[@]} " != *" --session-name "* &&
" ${COMP_WORDS[@]} " != *" --session-id "* &&
" ${COMP_WORDS[@]} " != *" --all "* ]] &&
items+=(--session-id --session-name --all)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
--image)
COMPREPLY=( $(compgen -- ${cur}) )
;;
--target-directory|--tmpdir)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
--source)
compopt -o nospace
COMPREPLY=( $(compgen -o plusdirs -f -X '!*.iso' \
-- ${cur}) )
[[ ${#COMPREPLY[@]} = 1 && \
"${COMPREPLY[0]}" != *".iso" ]] && \
COMPREPLY[0]="${COMPREPLY[0]}/"
;;
--passwordfile)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
fi
;;
guestproperty)
items=(get set delete unset enumerate wait)
subcommand=${COMP_WORDS[2]}
if [[ "${prev}" == "${subcommand}" ]]; then
_vms_comp vms
elif [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
get)
_get_excluded_items "--verbose"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
set)
_get_excluded_items "--flags"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
enumerate)
_get_excluded_items "--patterns"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
wait)
items=(--timeout --fail-on-timeout)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
hostonlyif)
items=(ipconfig create remove)
subcommand=${COMP_WORDS[2]}
case "${prev}" in
ipconfig|remove)
_hostonlyif_comp
;;
esac
if [[ ${#COMPREPLY[@]} -eq 0 && \
" ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
ipconfig)
items=(--dhcp --ip --ipv6 --netmask --netmasklengthv6)
[[ " ${COMP_WORDS[@]} " == *" --dhcp "* ]] && items=()
[[ " ${COMP_WORDS[@]} " == *" --ip "* ]] &&
items=(--netmask)
[[ " ${COMP_WORDS[@]} " == *" --netmask "* ]] &&
items=(--ip)
[[ " ${COMP_WORDS[@]} " == *" --ipv6 "* ]] &&
items=(--netmasklengthv6)
[[ " ${COMP_WORDS[@]} " == *" --netmasklengthv6 "* ]] &&
items=(--ipv6)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
else
[[ ${COMP_CWORD} -eq 2 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
import)
items=(--options --dry-run -n --vmname --cloud --cloudprofile
--cloudinstanceid --cloudbucket)
if [[ "${prev}" == "import" ]]; then
COMPREPLY=( $(compgen -o plusdirs -f -X '!@(*.ovf|*.ova)' \
-- ${cur}) )
else
case "${prev}" in
--options)
COMPREPLY=( $(compgen -W "keepallmacs keepnatmacs
importtovdi" -- ${cur}) )
;;
esac
[[ " ${COMP_WORDS[@]} " != *" --dry-run"* &&
" ${COMP_WORDS[@]} " != *" -n"* ]] &&
items+=(-n --dry-run)
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
fi
;;
list)
if [[ ${prev} == ${cmd} ]]; then
_list_comp ${cur}
else
case "${prev}" in
--sorted|-s)
COMPREPLY=( $(compgen -W "-l --long" -- ${cur}) )
;;
--long|-l)
COMPREPLY=( $(compgen -W "-s --sorted" -- ${cur}) )
;;
*)
COMPREPLY=( $(compgen -W "-l --long -s --sorted" -- ${cur}) )
;;
esac
fi
;;
mediumio)
if [[ ${prev} == ${cmd} ]]; then
_hdd_comp
_floppy_comp
_dvds_comp
else
case "${prev}" in
formatfat)
COMPREPLY=( $(compgen -W "--quick" -- ${cur}) )
;;
cat)
COMPREPLY=( $(compgen -W "--hex --offset --size
--output" -- ${cur}) )
;;
stream)
COMPREPLY=( $(compgen -W "--forma --variant
--output" -- ${cur}) )
;;
*)
COMPREPLY=( $(compgen -W "--password-file cat formatfat
stream" -- ${cur}) )
esac
fi
;;
mediumproperty)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
else
case "${prev}" in
disk|dvd|floppy)
COMPREPLY=( $(compgen -W "get set delete" -- ${cur}) )
;;
get|set|floppy)
_get_medium
;;
esac
fi
;;
metrics)
items=(list setup query enable disable collect)
subcommand=${COMP_WORDS[2]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
list|query)
if [[ "${subcommand}" == "${prev}" ]]; then
_vms_comp vms
items=(host)
_get_excluded_items "${items[@]}"
COMPREPLY+=( $(compgen -W '$result' -- ${cur}) )
fi
;;
setup)
if [[ "${subcommand}" == "${prev}" ]]; then
_vms_comp vms
items=(host)
_get_excluded_items "${items[@]}"
COMPREPLY+=( $(compgen -W '$result' -- ${cur}) )
else
items=(--period --samples --list)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
enable|disable)
if [[ "${subcommand}" == "${prev}" ]]; then
_vms_comp vms
items=(host)
_get_excluded_items "${items[@]}"
COMPREPLY+=( $(compgen -W '$result' -- ${cur}) )
else
_get_excluded_items "--list"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
collect)
if [[ "${subcommand}" == "${prev}" ]]; then
_vms_comp vms
items=(host)
_get_excluded_items "${items[@]}"
COMPREPLY+=( $(compgen -W '$result' -- ${cur}) )
else
items=(--period --samples --detach --list)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
modifymedium)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
else
case "${prev}" in
disk)
_hdd_comp
;;
dvd)
_dvds_comp
;;
floppy)
_floppy_comp
;;
*)
_find_item_name 2
items=(--type --autoreset --property --compact --resize
--move --description --setlocation)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--type)
COMPREPLY=( $(compgen -W "normal writethrough
immutable shareable readonly multiattach" --\
${cur}) )
;;
--autoreset)
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
--move)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
--setlocation)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
;;
esac
fi
;;
modifyvm)
items=( --accelerate-2d-video --accelerate-3d --acpi --apic --audio
--audio-codec --audio-controller --audio-in --audio-out
--autostart-delay --autostart-enabled --bios-apic
--bios-bootm-enu --bios-logo-display-time --bios-logo-fade-in
--bios-logo-fade-out --bios-logo-image-path --bios-pxe-debug
--bios-system-time-offset --boot1 --boot2 --boot3 --boot4
--bridge-adapter1 --bridge-adapter2 --bridge-adapter3
--bridge-adapter4 --bridge-adapter5 --bridge-adapter6
--bridge-adapter7 --bridge-adapter8 --cable-connected1
--cable-connected2 --cable-connected3 --cable-connected4
--cable-connected5 --cable-connected6 --cable-connected7
--cloud-network1 --cloud-network2 --cloud-network3
--cloud-network4 --cable-connected8 --chipset --clipboard-mode
--cpu-profile --cpu-execution-cap --cpu-hotplug
--cpuid-portability-level --cpuid-remove --cpuid-set
--cpuid-remove-all --cpus --default-frontend --description
--drag-and-drop --firmware --graphicscontroller --groups
--guest-debug-address --guest-debug-io-provider
--guest-debug-port --guest-debug-provider --guest-memory-balloon
--hardware-uuid --host-only-adapter1 --host-only-adapter2
--host-only-adapter3 --host-only-adapter4 --host-only-adapter5
--host-only-adapter6 --host-only-adapter7 --host-only-adapter8
--host-only-net1 --host-only-net2 --host-only-net3
--host-only-net4 --host-only-net5 --host-only-net6
--host-only-net7 --host-only-net8 --hpet --hwvirtex
--ibpb-on-vm-entry --ibpb-on-vm-exit --icon-file --intnet1
--intnet2 --intnet3 --intnet4 --intnet5 --intnet6 --intnet7
--intnet8 --ioapic --iommu --keyboard --l1d-flush-on-sched
--l1d-flush-on-vm-entry --large-pages --long-mode --lpt1
--lpt-mode1 --mac-address1 --mac-address2 --mac-address3
--mac-address4 --mac-address5 --mac-address6 --mac-address7
--mac-address8 --mds-clear-on-sched --mds-clear-on-vm-entry
--memory --monitor-count --mouse --name --nat-alias-mode1
--nat-alias-mode2 --nat-alias-mode3 --nat-alias-mode4
--nat-alias-mode5 --nat-alias-mode6 --nat-alias-mode7
--nat-alias-mode8 --nat-bind-ip1 --nat-bind-ip2 --nat-bind-ip3
--nat-bind-ip4 --nat-bind-ip5 --nat-bind-ip6 --nat-bind-ip7
--nat-bind-ip8 --nat-dns-host-resolver1 --nat-dns-host-resolver2
--nat-dns-host-resolver3 --nat-dns-host-resolver4
--nat-dns-host-resolver5 --nat-dns-host-resolver6
--nat-dns-host-resolver7 --nat-dns-host-resolver8
--nat-dns-pass-domain1 --nat-dns-pass-domain2
--nat-dns-pass-domain3 --nat-dns-pass-domain4
--nat-dns-pass-domain5 --nat-dns-pass-domain6
--nat-dns-pass-domain7 --nat-dns-pass-domain8 --nat-dns-proxy1
--nat-dns-proxy2 --nat-dns-proxy3 --nat-dns-proxy4
--nat-dns-proxy5 --nat-dns-proxy6 --nat-dns-proxy7
--nat-dns-proxy8 --nat-localhostreachable1
--nat-localhostreachable2 --nat-localhostreachable3
--nat-localhostreachable4 --nat-localhostreachable5
--nat-localhostreachable6 --nat-localhostreachable7
--nat-localhostreachable8 --nat-net1 --nat-net2 --nat-net3
--nat-net4 --nat-net5 --nat-net6 --nat-net7 --nat-net8
--nat-network1 --nat-network2 --nat-network3 --nat-network4
--nat-network5 --nat-network6 --nat-network7 --nat-network8
--nat-pf1 --nat-pf2 --nat-pf3 --nat-pf4 --nat-pf5 --nat-pf6
--nat-pf7 --nat-pf8 --nat-settings1 --nat-settings2
--nat-settings3 --nat-settings4 --nat-settings5 --nat-settings6
--nat-settings7 --nat-settings8 --nat-tftp-file1 --nat-tftp-file2
--nat-tftp-file3 --nat-tftp-file4 --nat-tftp-file5
--nat-tftp-file6 --nat-tftp-file7 --nat-tftp-file8
--nat-tftp-prefix1 --nat-tftp-prefix2 --nat-tftp-prefix3
--nat-tftp-prefix4 --nat-tftp-prefix5 --nat-tftp-prefix6
--nat-tftp-prefix7 --nat-tftp-prefix8 --nat-tftp-server1
--nat-tftp-server2 --nat-tftp-server3 --nat-tftp-server4
--nat-tftp-server5 --nat-tftp-server6 --nat-tftp-server7
--nat-tftp-server8 --nested-hw-virt --nested-paging --nic1 --nic2
--nic3 --nic4 --nic5 --nic6 --nic7 --nic8 --nic-bandwidth-group1
--nic-boot-prio1 --nic-generic-drv1 --nic-generic-drv2
--nic-generic-drv3 --nic-generic-drv4 --nic-generic-drv5
--nic-generic-drv6 --nic-generic-drv7 --nic-generic-drv8
--nic-promisc1 --nic-promisc2 --nic-promisc3 --nic-promisc4
--nic-promisc5 --nic-promisc6 --nic-promisc7 --nic-promisc8
--nic-property1 --nic-property2 --nic-property3 --nic-property4
--nic-property5 --nic-property6 --nic-property7 --nic-property8
--nic-speed1 --nic-speed2 --nic-speed3 --nic-speed4 --nic-speed5
--nic-speed6 --nic-speed7 --nic-speed8 --nic-trace1 --nic-trace2
--nic-trace3 --nic-trace4 --nic-trace5 --nic-trace6 --nic-trace7
--nic-trace8 --nic-trace-file1 --nic-trace-file2
--nic-trace-file3 --nic-trace-file4 --nic-trace-file5
--nic-trace-file6 --nic-trace-file7 --nic-trace-file8 --nic-type1
--nic-type2 --nic-type3 --nic-type4 --nic-type5 --nic-type6
--nic-type7 --nic-type8 --os-type --pae --page-fusion
--paravirt-debug --paravirt-provider --pci-attach --pci-detach
--plug-cpu --recording --recording-file --recording-max-size
--recording-max-time --recording-opts --recording-screens
--recording-video-fps --recording-video-rate
--recording-video-res --rtc-use-utc --snapshot-folder --spec-ctrl
--system-uuid-le --teleporter --teleporter-address
--teleporter-password --teleporter-password-file
--teleporter-port --testing-cfg-dwordidx --testing-enabled
--testing-mmio --tpm-location --tpm-type
--tracing-allow-vm-access --tracing-config --tracing-enabled
--triple-fault-reset --uart1 --uart2 --uart-mode1 --uart-mode2
--uart-type1 --uart-type2 --unplug-cpu --usb-card-reader
--usb-ehci --usb-ohci --usb-rename --usb-xhci
--virt-vmsave-vmload --vm-process-priority --vram --vrde
--vrde-address --vrde-auth-library --vrde-auth-type
--vrde-extpack --vrde-multi-con --vrde-port --vrde-property
--vrde-reuse-con --vrde-video-channel
--vrde-video-channel-quality --vtx-ux --vtx-vpid --x2apic )
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--groups)
COMPREPLY=()
_group_comp
;;
--os-type)
COMPREPLY=()
_os_comp
;;
--accelerate-2d-video|--accelerate-3d|--acpi|--apic|\
--audio-in|--audio-out|--autostart-enabled|\
--bios-logo-fade-in|--bios-logo-fade-out|--bios-pxe-debug|\
--cable-connected1|--cable-connected2|--cable-connected3|\
--cable-connected4|--cable-connected5|--cable-connected6|\
--cable-connected7|--cable-connected8|--cpu-hotplug|--hpet|\
--hwvirtex|--ibpb-on-vm-entry|--ibpb-on-vm-exit|--ioapic|\
--l1d-flush-on-sched|--l1d-flush-on-vm-entry|--large-pages|\
--long-mode|--mds-clear-on-sched|--mds-clear-on-vm-entry|\
--nat-dns-host-resolver[1-8]|--nat-dns-pass-domain[1-8]|\
--nat-dns-proxy[1-8]|--nat-localhostreachable[1-8]|\
--nested-hw-virt|--nested-paging|--nic-trace[1-8]|--pae|\
--page-fusion|--recording|--rtc-use-utc|--spec-ctrl|\
--system-uuid-le|--teleporter|--testing-enabled|\
--testing-mmio|--tracing-allow-vm-access|--tracing-enabled|\
--triple-fault-reset|--usb-card-reader|--usb-ehci|\
--usb-ohci|--usb-xhci|--virt-vmsave-vmload|--vrde-multi-con|\
--vrde-reuse-con|--vrde-video-channel|--vrde|--vtx-ux|\
--vtx-vpid|--x2apic)
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
--graphicscontroller)
COMPREPLY=( $(compgen -W "none vboxvga vmsvga vboxsvga" \
-- ${cur}) )
;;
--firmware)
COMPREPLY=( $(compgen -W "bios efi efi32 efi64" \
-- ${cur}) )
;;
--chipset)
COMPREPLY=( $(compgen -W "ich9 piix3" -- ${cur}) )
;;
--bios-boot-menu)
COMPREPLY=( $(compgen -W "disabled menuonly
messageandmenu" -- ${cur}) )
;;
--boot[1-4])
COMPREPLY=( $(compgen -W "none floppy dvd disk net" \
-- ${cur}) )
;;
--nic[1-8])
COMPREPLY=( $(compgen -W "none null nat bridged intnet
hostonly hostonlynet generic natnetwork cloud" \
-- ${cur}) )
;;
--nic-type[1-8])
COMPREPLY=( $(compgen -W "Am79C970A Am79C973 82540EM
82543GC 82545EM virtio" -- ${cur}) )
;;
--nic-promisc[1-8])
COMPREPLY=( $(compgen -W "deny allow-vms allow-all" \
-- ${cur}) )
;;
--nicbandwidthgroup[1-8])
COMPREPLY=()
_bandwidthctl_comp
_get_excluded_items "none"
COMPREPLY+=( $(compgen -W "$result" -- ${cur}) )
;;
--bridge-adapter[1-8])
COMPREPLY=()
_bridgedif_comp
_get_excluded_items "none"
COMPREPLY+=( $(compgen -W "$result" -- ${cur}) )
;;
--hostonlyadapter[1-8])
COMPREPLY=()
_hostonlyif_comp
_get_excluded_items "none"
COMPREPLY+=( $(compgen -W "$result" -- ${cur}) )
;;
--intnet[1-8])
COMPREPLY=()
_intnet_comp
;;
--nat-network[1-8])
COMPREPLY=()
_natnet_comp
;;
--nat-net[1-8])
COMPREPLY=()
_natnet_comp
;;
--nat-pf[1-8])
COMPREPLY=( $(compgen -W "delete" -- ${cur}) )
;;
--nat-alias-mode[1-8])
COMPREPLY=( $(compgen -W "default" -- ${cur}) )
;;
--macaddress[1-8])
COMPREPLY=( $(compgen -W "auto" -- ${cur}) )
;;
--mouse)
COMPREPLY=( $(compgen -W "ps2 usb usbtablet
usbmultitouch usbmtscreenpluspad" -- ${cur}) )
;;
--keyboard)
COMPREPLY=( $(compgen -W "ps2 usb" -- ${cur}) )
;;
--uart[1-2]|--lpt[1-2])
COMPREPLY=( $(compgen -W "off" -- ${cur}) )
;;
--uart-mode[1-2])
COMPREPLY=( $(compgen -W "disconnected serverpipe
clientpipe tcpserverport tcpclienthostname:port
filefilename device-name" -- ${cur}) )
;;
--uart-type[1-2])
COMPREPLY=( $(compgen -W "16450 16550A
16750" -- ${cur}) )
;;
--audio)
COMPREPLY=( $(compgen -W "none null dsound was oss alsa
pulse coreaudio" -- ${cur}) )
;;
--audio-controller)
COMPREPLY=( $(compgen -W "ac97 hda sb16" -- ${cur}) )
;;
--audio-codec)
COMPREPLY=( $(compgen -W "stac9700 ad1980 stac9221
sb16" -- ${cur}) )
;;
--clipboard-mode|--drag-and-drop)
COMPREPLY=( $(compgen -W "disabled hosttoguest
guesttohost bidirectional" -- ${cur}) )
;;
--vrdeextpack|--vrdeauthlibrary|--snapshotfolder|\
--defaultfrontend)
COMPREPLY=( $(compgen -W "default" -- ${cur}) )
;;
--vrdeauthtype)
COMPREPLY=( $(compgen -W "null external guest" \
-- ${cur}) )
;;
--paravirt-provider)
COMPREPLY=( $(compgen -W "none default legacy minimal
hyperv kvm" -- ${cur}) )
;;
--cpuid-portability-level)
COMPREPLY=( $(compgen -W "0 1 2 3" -- ${cur}) )
;;
# TODO: figure out right completion for:
# host | Intel 8086 | Intel 80286 | Intel 80386
--cpu-profile)
COMPREPLY=( $(compgen -W "host 8086 80286 80386" \
-- ${cur}) )
;;
--bios-apic)
COMPREPLY=( $(compgen -W "disabled apic x2apic" \
-- ${cur}) )
;;
--teleporter-password-file|--icon-file|--recording-file|\
--bios-logo-image-path|--nic-trace-file[1-8]|\
--nat-tftp-file[1-8])
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
--vm-process-priority)
COMPREPLY=( $(compgen -W "default flat low normal high" \
-- ${cur}) )
;;
--recording-screens)
COMPREPLY=( $(compgen -W "all none" -- ${cur}) )
;;
--cloud-network[1-4]=network-name)
COMPREPLY=( )
;;
--default-frontend)
COMPREPLY=( $(compgen -W "default" -- ${cur}) )
;;
--guest-debug-io-provider)
COMPREPLY=( $(compgen -W "none tcp udp ipcdefault" \
-- ${cur}) )
;;
--guest-debug-provider)
COMPREPLY=( $(compgen -W "none native gdb kd" \
-- ${cur}) )
;;
--iommu)
COMPREPLY=( $(compgen -W "none automatic amd intel" \
-- ${cur}) )
;;
--snapshot-folder)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
--teleporter-address)
COMPREPLY=( )
;;
--tpm-type)
COMPREPLY=( $(compgen -W "none 1.2 2.0 host swtpm" \
-- ${cur}) )
;;
--vrde-auth-type)
COMPREPLY=( $(compgen -W "null external guest" \
-- ${cur}) )
;;
--vrde-extpack)
COMPREPLY=( $(compgen -W "default" -- ${cur}) )
;;
esac
fi
;;
movevm)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_find_item_name 2
items=(--type --folder)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--type)
COMPREPLY=( $(compgen -W "basic" -- ${cur}) )
_snapshot_comp
;;
--folder)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
fi
;;
natnetwork)
items=(add remove modify start stop list)
subcommand=${COMP_WORDS[2]}
if [[ "${prev}" == "--netname" ]]; then
_natnet_comp
elif [[ "${prev}" == "--dhcp" ]]; then
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
elif [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
add|modify)
items=(--netname --network --dhcp --port-forward-4
--loopback-4 --ipv6 --port-forward-6 --loopback-6)
[[ " ${COMP_WORDS[@]} " != *" --enable"* &&
" ${COMP_WORDS[@]} " != *" --disable"* ]] &&
items+=(--enable --disable)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
start|stop|remove)
_get_excluded_items "--netname"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
else
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
;;
registervm)
if [[ ${prev} == ${cmd} ]]; then
bind 'set mark-directories on'
compopt -o nospace
IFS=$'\n'
COMPREPLY=( $(compgen -o plusdirs -f -X '!*.vbox' -- ${cur}) )
[[ ${#COMPREPLY[@]} = 1 && "${COMPREPLY[0]}" != *".vbox" ]] && \
COMPREPLY[0]="${COMPREPLY[0]}/"
else
if [[ $prev == "--passwordfile" ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
else
local items=( --passwordfile )
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
fi
;;
setextradata)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "global" -- ${cur}) )
_vms_comp vms
fi
;;
setproperty)
items=(machinefolder hwvirtexclusive vrdeauthlibrary
websrvauthlibrary vrdeextpack autostartdbpath loghistorycount
defaultfrontend logginglevel proxymode proxyurl)
subcommand=${COMP_WORDS[2]}
if [[ "${prev}" == "${cmd}" ]]; then
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
else
case "${prev}" in
machinefolder)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
_get_excluded_items "default"
COMPREPLY+=( $(compgen -W "$result" -- ${cur}) )
;;
hwvirtexclusive)
COMPREPLY+=( $(compgen -W "on off" -- ${cur}) )
;;
websrvauthlibrary)
COMPREPLY+=( $(compgen -W "default null" -- ${cur}) )
;;
vrdeextpack)
COMPREPLY+=( $(compgen -W "default null" -- ${cur}) )
;;
autostartdbpath)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
COMPREPLY+=( $(compgen -W "null" -- ${cur}) )
;;
defaultfrontend)
COMPREPLY=( $(compgen -W "null" -- ${cur}) )
;;
proxymode)
COMPREPLY=( $(compgen -W "system noproxy
manual" -- ${cur}) )
;;
esac
fi
;;
sharedfolder)
items=(add remove)
subcommand=${COMP_WORDS[2]}
case "${prev}" in
add|remove)
_vms_comp vms
;;
--hostpath)
COMPREPLY=( $(compgen -o dirnames -- ${cur}) )
;;
--name)
if [[ ${subcommand} == "remove" ]]; then
_find_item_name 3
_sharedfolder_comp "${name}"
fi
;;
esac
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
case "${subcommand}" in
add)
items=(--name --hostpath --transient --readonly
--automount --auto-mount-point)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
remove)
items=(--name --transient)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
fi
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
;;
showmediuminfo)
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "disk dvd floppy" -- ${cur}) )
_hdd_comp
_dvds_comp
_floppy_comp
else
case "${prev}" in
disk)
_hdd_comp
;;
dvd)
_dvds_comp
;;
floppy)
_floppy_comp
;;
*)
items=(--delete)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
fi
;;
showvminfo)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
local items=( --details --machinereadable --log --password-id
--password --password-idid --passwordfile )
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--log|--passwordfile)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
fi
;;
snapshot)
items=(take delete restore restorecurrent edit list showvminfo)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_find_item_name 2
subcommand=${COMP_WORDS[$((index+1))]}
if [[ " ${items[@]} " == *" $subcommand "* ]]; then
case "${subcommand}" in
take)
items=(--description --live --uniquename)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
delete|restore|showvminfo)
_snapshot_comp
;;
restorecurrent)
COMPREPLY=()
;;
edit)
if [[ ${prev} == "edit" &&
${#COMP_WORDS[@]} == 5 ]]; then
_snapshot_comp
COMPREPLY+=("--current")
else
items=(--name --description)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
list)
items=(--details --machinereadable)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
else
case "$prev" in
--uniquename)
COMPREPLY=( $(compgen -W "Number Timestamp Space
Force" -- ${cur}) )
;;
*)
[[ ${#COMPREPLY[@]} -eq 0 ]] && \
COMPREPLY=( $(compgen -W "${items[*]}" \
-- ${cur}) )
esac
fi
fi
;;
startvm)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms 1
elif [[ "${prev}" == "--type" ]]; then
COMPREPLY=( $(compgen -W "gui sdl headless separate" -- ${cur}) )
else
local items=(--putenv -E)
_is_any_item_used "${items[@]}"
if [[ "${result}" == "ITIS" ]]; then
local items=(--type)
else
local items=(--type -E --putenv)
fi
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
storageattach)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_find_item_name 2
local items=(--storagectl --port --device --type --medium --mtype
--comment --setuuid --setparentuuid --passthrough --tempeject
--nonrotational --discard --hotpluggable --bandwidthgroup
--forceunmount --server --target --tport --lun --encodedlun
--username --password --initiator --intnet --passwordfile)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--type)
COMPREPLY=( $(compgen -W "dvddrive hdd fdd" -- ${cur}) )
;;
--medium)
COMPREPLY=()
local tmp=(none emptydrive additions)
_hdd_comp
_floppy_comp
_dvds_comp
for item in "${tmp[@]}"
do
[[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item")
done
;;
--mtype)
COMPREPLY=( $(compgen -W "normal writethrough immutable
shareable readonly multiattach" -- ${cur}) )
;;
--passthrough|--tempeject|--nonrotational|--discard)
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
--passwordfile)
COMPREPLY=( $(compgen -f -- ${cur}) )
;;
esac
fi
;;
storagectl)
local items=(--name --add --controller --portcount --hostiocache
--bootable --rename --remove)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--add)
COMPREPLY=( $(compgen -W "ide sata scsi floppy
sas usb pcie" -- ${cur}) )
;;
--controller)
COMPREPLY=( $(compgen -W "LSILogic LSILogicSAS BusLogic
IntelAHCI PIIX3 PIIX4 ICH6 I82078 USB NVMe" -- ${cur}) )
;;
--bootable|--hostiocache)
COMPREPLY=( $(compgen -W "on off" -- ${cur}) )
;;
esac
fi
;;
unregistervm)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
else
local items=(--delete)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
usbfilter)
if [[ COMP_CWORD -ge 3 ]]; then
subcommand="${COMP_WORDS[2]}"
if [[ $subcommand == "${cmd}" ]]; then
subcommand="${COMP_WORDS[3]}"
fi
fi
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "add modify remove" -- ${cur}) )
else
case "${prev}" in
--target)
_vms_comp vms
COMPREPLY+=( $(compgen -W "global" -- ${cur}) )
;;
--action)
COMPREPLY=( $(compgen -W "ignore hold" -- ${cur}) )
;;
--active|--remote)
COMPREPLY=( $(compgen -W "yes no" -- ${cur}) )
;;
esac
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
case "${subcommand}" in
add|modify)
local items=(--target --name --action --active
--vendorid --productid --revision --manufacturer
--product --remote --serialnumber --maskedinterfaces)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
remove)
local items=(--target)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
fi
fi
;;
usbdevsource)
if [[ COMP_CWORD -ge 3 ]]; then
subcommand="${COMP_WORDS[2]}"
if [[ $subcommand == "${cmd}" ]]; then
subcommand="${COMP_WORDS[3]}"
fi
fi
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "add remove" -- ${cur}) )
else
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
case "${subcommand}" in
add)
local items=(--address --backend)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
esac
fi
fi
;;
unattended)
if [[ COMP_CWORD -ge 3 ]]; then
subcommand="${COMP_WORDS[2]}"
if [[ $subcommand == "${cmd}" ]]; then
subcommand="${COMP_WORDS[3]}"
fi
fi
if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "detect install" -- ${cur}) )
else
case "${prev}" in
--iso|--password-file|--additions-iso|--validation-kit-iso|\
--script-template|--post-install-template)
COMPREPLY+=( $(compgen -f -- ${cur}) )
;;
--auxiliary-base-path)
COMPREPLY+=( $(compgen -o dirnames -- ${cur}) )
;;
--start-vm)
COMPREPLY=( $(compgen -W "gui sdl headless separate" \
-- ${cur}) )
;;
esac
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
case "${subcommand}" in
detect)
local items=(--iso --machine-readable)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
;;
install)
if [[ ${prev} == ${subcommand} ]]; then
_vms_comp vms
else
local items=(--iso --user=login
--password=password --password-file
--full-user-name --key
--install-additions --no-install-additions
--additions-iso --install-txs --no-install-txs
--validation-kit-iso --locale --country
--time-zone --hostname
--package-selection-adjustment --dry-run
--auxiliary-base-path=path --image-index
--script-template --post-install-template
--post-install-command
--extra-install-kernel-parameters --language
--start-vm)
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
fi
;;
esac
fi
fi
;;
esac
}
complete -o default -F _VBoxManage VBoxManage
complete -o default -F _VBoxManage vboxmanage
# vim: set ft=sh tw=80 sw=4 et :