# bash completion for lvm -*- shell-script -*- proc _lvm_volumegroups { setglobal COMPREPLY = '( '$(compgen -W "$( vgscan 2>/dev/null | \ sed -n -e 's|.*Found.*"\(.*\)".*$|\1|p' )" -- "$cur" ) ) } proc _lvm_physicalvolumes { setglobal COMPREPLY = '( '$(compgen -W "$( pvscan 2>/dev/null | \ sed -n -e 's|^.*PV \(.*\) VG.*$|\1|p' )" -- "$cur" ) ) } proc _lvm_logicalvolumes { setglobal COMPREPLY = '( '$(compgen -W "$( lvscan 2>/dev/null | \ sed -n -e "s|^.*'\(.*\)'.*$|\1|p" )" -- "$cur" ) ) if [[ $cur == /dev/mapper/* ]] { _filedir var i = '' for i in [$(!COMPREPLY[@])] { [[ ${COMPREPLY[i]} == */control ]] && unset 'COMPREPLY[i]' } } } proc _lvm_units { setglobal COMPREPLY = '( '$( compgen -W 'h s b k m g t H K M G T' -- "$cur" ) ) } proc _lvm_sizes { setglobal COMPREPLY = '( '$( compgen -W 'k K m M g G t T' -- "$cur" ) ) } # @param $1 glob matching args known to take an argument proc _lvm_count_args { setglobal args = '0' var offset = '1' if [[ "${words[0]}" == lvm ]] { set offset = '2' } var 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 } proc _lvmdiskscan { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } } && complete -F _lvmdiskscan lvmdiskscan proc _pvscan { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '--debug --exported --novolumegroup --help --ignorelockingfailure --partial --short --uuid --verbose --version' -- "$cur" ) ) } } && complete -F _pvscan pvscan proc _pvs { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -o|-O|--options|--sort setglobal 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 with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvs pvs proc _pvdisplay { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvdisplay pvdisplay proc _pvchange { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|-x|--autobackup|--allocatable setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvchange pvchange proc _pvcreate { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with --restorefile _filedir return 0 with -M|--metadatatype setglobal COMPREPLY = '( '$( compgen -W '1 2' -- "$cur" ) ) return 0 with --metadatacopies setglobal COMPREPLY = '( '$( compgen -W '0 1 2' -- "$cur" ) ) return 0 with --metadatasize|--setphysicalvolumesize _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvcreate pvcreate proc _pvmove { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -n|--name _lvm_logicalvolumes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '--abort --autobackup --background --debug --force --help --interval --test --verbose --version --name' \ -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvmove pvmove proc _pvremove { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_physicalvolumes } } && complete -F _pvremove pvremove proc _vgscan { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } } && complete -F _vgscan vgscan proc _vgs { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -o|-O|--options|--sort setglobal 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 with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgs vgs proc _vgdisplay { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgdisplay vgdisplay proc _vgchange { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -a|-A|-x|--available|--autobackup|--resizeable setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '--autobackup --alloc --partial --debug --help --ignorelockingfailure --test --uuid --verbose --version --available --resizeable --logicalvolume --addtag --deltag' \ -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgchange vgchange proc _vgcreate { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -M|--metadatatype setglobal COMPREPLY = '( '$( compgen -W '1 2' -- "$cur" ) ) return 0 with -s|--physicalextentsize _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '--autobackup --addtag --alloc --debug --help --maxlogicalvolumes --metadatatype --maxphysicalvolumes --physicalextentsize --test --verbose --version' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup|-M|--metadatatype|-s|--physicalextentsize)' if [[ $args -eq 0 ]] { _lvm_volumegroups } else { _lvm_physicalvolumes } } } && complete -F _vgcreate vgcreate proc _vgremove { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgremove vgremove proc _vgrename { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgrename vgrename proc _vgreduce { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup)' if [[ $args -eq 0 ]] { _lvm_volumegroups } else { _lvm_physicalvolumes } } } && complete -F _vgreduce vgreduce proc _vgextend { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -L|--size _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]] { _lvm_volumegroups } else { _lvm_physicalvolumes } } } && complete -F _vgextend vgextend proc _vgport { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgport vgimport vgexport proc _vgck { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgck vgck proc _vgconvert { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -M|--metadatatype setglobal COMPREPLY = '( '$( compgen -W '1 2' -- "$cur" ) ) return 0 with --metadatacopies setglobal COMPREPLY = '( '$( compgen -W '0 1 2' -- "$cur" ) ) return 0 with --metadatasize _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgconvert vgconvert proc _vgcfgbackup { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -f|--file _filedir return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgcfgbackup vgcfgbackup proc _vgcfgrestore { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -f|--file _filedir return 0 with -M|--metadatatype setglobal COMPREPLY = '( '$( compgen -W '1 2' -- "$cur" ) ) return 0 with -n|--name _lvm_volumegroups return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgcfgrestore vgcfgrestore proc _vgmerge { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgmerge vgmerge proc _vgsplit { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -M|--metadatatype setglobal COMPREPLY = '( '$( compgen -W '1 2' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '--autobackup --debug --help --list --metadatatype --test --verbose --version' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup|-M|--metadatatype)' if [[ $args -eq 0 || $args -eq 1 ]] { _lvm_volumegroups } else { _lvm_physicalvolumes } } } && complete -F _vgsplit vgsplit proc _vgmknodes { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_volumegroups } } && complete -F _vgmknodes vgmknodes proc _lvscan { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } } && complete -F _lvscan lvscan proc _lvs { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -o|-O|--options|--sort setglobal 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 with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvs lvs proc _lvdisplay { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with --units _lvm_units return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvdisplay lvdisplay proc _lvchange { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -a|-A|-C|-M|--available|--autobackup|--contiguous|--persistent setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -p|--permission setglobal COMPREPLY = '( '$( compgen -W 'r rw' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvchange lvchange proc _lvcreate { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|-C|-M|-Z|--autobackup|--contiguous|--persistent|--zero setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -L|--size _lvm_sizes return 0 with -p|--permission setglobal COMPREPLY = '( '$( compgen -W 'r rw' -- "$cur" ) ) return 0 with -n|--name _lvm_logicalvolumes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|-C|-M|-Z|--autobackup|--contiguous|--persistent|--zero|-L|--size|-p|--permission|-n|--name)' if [[ $args -eq 0 ]] { _lvm_volumegroups } else { _lvm_physicalvolumes } } } && complete -F _lvcreate lvcreate proc _lvremove { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvremove lvremove proc _lvrename { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvrename lvrename proc _lvreduce { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -L|--size _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { _lvm_logicalvolumes } } && complete -F _lvreduce lvreduce proc _lvresize { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -L|--size _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]] { _lvm_logicalvolumes } else { _lvm_physicalvolumes } } } && complete -F _lvresize lvresize proc _lvextend { var cur = '', prev = '', words = '', cword = '' _init_completion || return match $prev { with -A|--autobackup setglobal COMPREPLY = '( '$( compgen -W 'y n' -- "$cur" ) ) return 0 with -L|--size _lvm_sizes return 0 } if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_usage "$1" --help )' -- "$cur" ) ) } else { var args = '' _lvm_count_args '@(-A|--autobackup|-L|--size)' if [[ $args -eq 0 ]] { _lvm_logicalvolumes } else { _lvm_physicalvolumes } } } && complete -F _lvextend lvextend proc _lvm { var cur = '', prev = '', words = '', cword = '' _init_completion || return if [[ $cword -eq 1 ]] { setglobal 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 { match $(words[1]) { with 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]) } } } && complete -F _lvm lvm # ex: ts=4 sw=4 et filetype=sh