# bash completion for lvm -*- shell-script -*- _lvm_volumegroups() { COMPREPLY=( $(compgen -W "$( vgscan 2>/dev/null | \ sed -n -e 's|.*Found.*"\(.*\)".*$|\1|p' )" -- "$cur" ) ) } _lvm_physicalvolumes() { COMPREPLY=( $(compgen -W "$( pvscan 2>/dev/null | \ sed -n -e 's|^.*PV \(.*\) VG.*$|\1|p' )" -- "$cur" ) ) } _lvm_logicalvolumes() { COMPREPLY=( $(compgen -W "$( lvscan 2>/dev/null | \ sed -n -e "s|^.*'\(.*\)'.*$|\1|p" )" -- "$cur" ) ) if [[ $cur == /dev/mapper/* ]]; then _filedir local i for i in ${!COMPREPLY[@]}; do [[ ${COMPREPLY[i]} == */control ]] && unset 'COMPREPLY[i]' done fi } _lvm_units() { COMPREPLY=( $( compgen -W 'h s b k m g t H K M G T' -- "$cur" ) ) } _lvm_sizes() { COMPREPLY=( $( compgen -W 'k K m M g G t T' -- "$cur" ) ) } # @param $1 glob matching args known to take an argument _lvm_count_args() { args=0 local offset=1 if [[ "${words[0]}" == lvm ]]; then offset=2 fi local i prev=${words[$offset-1]} for (( i=$offset; i < cword; i++ )); do if [[ "${words[i]}" != -* && $prev != $1 ]]; then args=$(($args + 1)) fi prev=${words[i]} done } _lvmdiskscan() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) fi } && complete -F _lvmdiskscan lvmdiskscan _pvscan() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--debug --exported --novolumegroup --help --ignorelockingfailure --partial --short --uuid --verbose --version' -- "$cur" ) ) fi } && complete -F _pvscan pvscan _pvs() { local cur prev words cword _init_completion || return case $prev in -o|-O|--options|--sort) COMPREPLY=( $( compgen -W 'pv_fmt pv_uuid pv_size pv_free pv_used pv_name pv_attr pv_pe_count pv_pe_alloc_count' -- "$cur" ) ) return 0 ;; --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvs pvs _pvdisplay() { local cur prev words cword _init_completion || return case $prev in --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvdisplay pvdisplay _pvchange() { local cur prev words cword _init_completion || return case $prev in -A|-x|--autobackup|--allocatable) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvchange pvchange _pvcreate() { local cur prev words cword _init_completion || return case $prev in --restorefile) _filedir return 0 ;; -M|--metadatatype) COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) return 0 ;; --metadatacopies) COMPREPLY=( $( compgen -W '0 1 2' -- "$cur" ) ) return 0 ;; --metadatasize|--setphysicalvolumesize) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvcreate pvcreate _pvmove() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -n|--name) _lvm_logicalvolumes return 0 esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--abort --autobackup --background --debug --force --help --interval --test --verbose --version --name' \ -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvmove pvmove _pvremove() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_physicalvolumes fi } && complete -F _pvremove pvremove _vgscan() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) fi } && complete -F _vgscan vgscan _vgs() { local cur prev words cword _init_completion || return case $prev in -o|-O|--options|--sort) COMPREPLY=( $( compgen -W 'vg_fmt vg_uuid vg_name vg_attr vg_size vg_free vg_sysid vg_extent_size vg_extent_count vg_free_count max_lv max_pv pv_count lv_count snap_count vg_seqno' \ -- "$cur" ) ) return 0 ;; --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgs vgs _vgdisplay() { local cur prev words cword _init_completion || return case $prev in --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgdisplay vgdisplay _vgchange() { local cur prev words cword _init_completion || return case $prev in -a|-A|-x|--available|--autobackup|--resizeable) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--autobackup --alloc --partial --debug --help --ignorelockingfailure --test --uuid --verbose --version --available --resizeable --logicalvolume --addtag --deltag' \ -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgchange vgchange _vgcreate() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -M|--metadatatype) COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) return 0 ;; -s|--physicalextentsize) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--autobackup --addtag --alloc --debug --help --maxlogicalvolumes --metadatatype --maxphysicalvolumes --physicalextentsize --test --verbose --version' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup|-M|--metadatatype|-s|--physicalextentsize)' if [[ $args -eq 0 ]]; then _lvm_volumegroups else _lvm_physicalvolumes fi fi } && complete -F _vgcreate vgcreate _vgremove() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgremove vgremove _vgrename() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgrename vgrename _vgreduce() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup)' if [[ $args -eq 0 ]]; then _lvm_volumegroups else _lvm_physicalvolumes fi fi } && complete -F _vgreduce vgreduce _vgextend() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -L|--size) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]]; then _lvm_volumegroups else _lvm_physicalvolumes fi fi } && complete -F _vgextend vgextend _vgport() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgport vgimport vgexport _vgck() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgck vgck _vgconvert() { local cur prev words cword _init_completion || return case $prev in -M|--metadatatype) COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) return 0 ;; --metadatacopies) COMPREPLY=( $( compgen -W '0 1 2' -- "$cur" ) ) return 0 ;; --metadatasize) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgconvert vgconvert _vgcfgbackup() { local cur prev words cword _init_completion || return case $prev in -f|--file) _filedir return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgcfgbackup vgcfgbackup _vgcfgrestore() { local cur prev words cword _init_completion || return case $prev in -f|--file) _filedir return 0 ;; -M|--metadatatype) COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) return 0 ;; -n|--name) _lvm_volumegroups return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgcfgrestore vgcfgrestore _vgmerge() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgmerge vgmerge _vgsplit() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -M|--metadatatype) COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--autobackup --debug --help --list --metadatatype --test --verbose --version' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup|-M|--metadatatype)' if [[ $args -eq 0 || $args -eq 1 ]]; then _lvm_volumegroups else _lvm_physicalvolumes fi fi } && complete -F _vgsplit vgsplit _vgmknodes() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_volumegroups fi } && complete -F _vgmknodes vgmknodes _lvscan() { local cur prev words cword _init_completion || return if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) fi } && complete -F _lvscan lvscan _lvs() { local cur prev words cword _init_completion || return case $prev in -o|-O|--options|--sort) COMPREPLY=( $( compgen -W 'lv_uuid lv_name lv_attr lv_minor lv_size seg_count origin snap_percent segtype stripes stripesize chunksize seg_start seg_size' -- "$cur" ) ) return 0 ;; --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvs lvs _lvdisplay() { local cur prev words cword _init_completion || return case $prev in --units) _lvm_units return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvdisplay lvdisplay _lvchange() { local cur prev words cword _init_completion || return case $prev in -a|-A|-C|-M|--available|--autobackup|--contiguous|--persistent) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -p|--permission) COMPREPLY=( $( compgen -W 'r rw' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvchange lvchange _lvcreate() { local cur prev words cword _init_completion || return case $prev in -A|-C|-M|-Z|--autobackup|--contiguous|--persistent|--zero) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -L|--size) _lvm_sizes return 0 ;; -p|--permission) COMPREPLY=( $( compgen -W 'r rw' -- "$cur" ) ) return 0 ;; -n|--name) _lvm_logicalvolumes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else local args _lvm_count_args '@(-A|-C|-M|-Z|--autobackup|--contiguous|--persistent|--zero|-L|--size|-p|--permission|-n|--name)' if [[ $args -eq 0 ]]; then _lvm_volumegroups else _lvm_physicalvolumes fi fi } && complete -F _lvcreate lvcreate _lvremove() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvremove lvremove _lvrename() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvrename lvrename _lvreduce() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -L|--size) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else _lvm_logicalvolumes fi } && complete -F _lvreduce lvreduce _lvresize() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -L|--size) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]]; then _lvm_logicalvolumes else _lvm_physicalvolumes fi fi } && complete -F _lvresize lvresize _lvextend() { local cur prev words cword _init_completion || return case $prev in -A|--autobackup) COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) return 0 ;; -L|--size) _lvm_sizes return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) else local args _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]]; then _lvm_logicalvolumes else _lvm_physicalvolumes fi fi } && complete -F _lvextend lvextend _lvm() { local cur prev words cword _init_completion || return if [[ $cword -eq 1 ]]; then COMPREPLY=( $( compgen -W 'dumpconfig help lvchange lvcreate lvdisplay lvextend lvmchange lvmdiskscan lvmsadc lvmsar lvreduce lvremove lvrename lvresize lvs lvscan pvchange pvcreate pvdata pvdisplay pvmove pvremove pvresize pvs pvscan vgcfgbackup vgcfgrestore vgchange vgck vgconvert vgcreate vgdisplay vgexport vgextend vgimport vgmerge vgmknodes vgreduce vgremove vgrename vgs vgscan vgsplit version' -- "$cur" ) ) else case "${words[1]}" in pvchange|pvcreate|pvdisplay|pvmove|pvremove|pvresize|pvs|pvscan|\ vgcfgbackup|vgcfgrestore|vgchange|vgck|vgconvert|vgcreate|\ vgdisplay|vgexport|vgextend|vgimport|vgmerge|vgmknodes|vgreduce|\ vgremove|vgrename|vgs|vgscan|vgsplit|lvchange|lvcreate|lvdisplay|\ lvextend|lvreduce|lvremove|lvrename|lvresize|lvscan) _${words[1]} ;; esac fi } && complete -F _lvm lvm # ex: ts=4 sw=4 et filetype=sh