# 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) _pvchange ;; pvcreate) _pvcreate ;; pvdisplay) _pvdisplay ;; pvmove) _pvmove ;; pvremove) _pvremove ;; pvresize) _pvresize ;; pvs) _pvs ;; pvscan) _pvscan ;; vgcfgbackup) _vgcfgbackup ;; vgcfgrestore) _vgcfgrestore ;; vgchange) _vgchange ;; vgck) _vgck ;; vgconvert) _vgconvert ;; vgcreate) _vgcreate ;; vgdisplay) _vgdisplay ;; vgexport) _vgexport ;; vgextend) _vgextend ;; vgimport) _vgimport ;; vgmerge) _vgmerge ;; vgmknodes) _vgmknodes ;; vgreduce) _vgreduce ;; vgremove) _vgremove ;; vgrename) _vgrename ;; vgs) _vgs ;; vgscan) _vgscan ;; vgsplit) _vgsplit ;; lvchange) _lvchange ;; lvcreate) _lvcreate ;; lvdisplay) _lvdisplay ;; lvextend) _lvextend ;; lvreduce) _lvreduce ;; lvremove) _lvremove ;; lvrename) _lvrename ;; lvresize) _lvresize ;; lvs) _lvs ;; lvscan) _lvscan ;; esac fi } && complete -F _lvm lvm # ex: ts=4 sw=4 et filetype=sh