_lsblk_module() { local cur prev OPTS LSBLK_COLS_ALL COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" LSBLK_COLS_ALL=" ALIGNMENT ID-LINK ID DISC-ALN DAX DISC-GRAN DISK-SEQ DISC-MAX DISC-ZERO FSAVAIL FSROOTS FSSIZE FSTYPE FSUSED FSUSE% FSVER GROUP HCTL HOTPLUG KNAME LABEL LOG-SEC MAJ:MIN MAJ MIN MIN-IO MODE MODEL MQ NAME OPT-IO OWNER PARTFLAGS PARTLABEL PARTN PARTTYPE PARTTYPENAME PARTUUID PATH PHY-SEC PKNAME PTTYPE PTUUID RA RAND REV RM RO ROTA RQ-SIZE SCHED SERIAL SIZE START STATE SUBSYSTEMS MOUNTPOINT MOUNTPOINTS TRAN TYPE UUID VENDOR WSAME WWN ZONED ZONE-SZ ZONE-WGRAN ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX " case $prev in '-e'|'--exclude'|'-I'|'--include') local realcur prefix MAJOR_ALL MAJOR I J realcur="${cur##*,}" prefix="${cur%$realcur}" for I in /sys/dev/block/*; do J=${I##*/} MAJOR_ALL="${MAJOR_ALL:-""} ${J%%:*}" done for WORD in ${MAJOR_ALL:-""}; do if ! [[ $prefix == *"$WORD"* ]]; then MAJOR="$WORD ${MAJOR:-""}" fi done compopt -o nospace COMPREPLY=( $(compgen -P "$prefix" -W "${MAJOR:-""}" -S ',' -- $realcur) ) return 0 ;; '-o'|'--output'|'-E'|'--dedup') local prefix realcur LSBLK_COLS realcur="${cur##*,}" prefix="${cur%$realcur}" for WORD in $LSBLK_COLS_ALL; do if ! [[ $prefix == *"$WORD"* ]]; then LSBLK_COLS="$WORD ${LSBLK_COLS:-""}" fi done compopt -o nospace COMPREPLY=( $(compgen -P "$prefix" -W "$LSBLK_COLS" -S ',' -- $realcur) ) return 0 ;; '--properties-by') compopt -o nospace COMPREPLY=( $(compgen -W "file udev blkid none" -- $cur) ) return 0 ;; '-x'|'--sort') compopt -o nospace COMPREPLY=( $(compgen -W "$LSBLK_COLS_ALL" -- $cur) ) return 0 ;; '-h'|'--help'|'-V'|'--version') return 0 ;; esac case $cur in -*) OPTS="--all --bytes --nodeps --discard --exclude --fs --filter --highlight --hyperlink --ct --ct-filter --help --include --json --ascii --list --dedup --merge --perms --noheadings --output --output-all --paths --pairs --properties-by --raw --inverse --topology --scsi --nvme --virtio --sort --width --list-columns --help --version" COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) ) return 0 ;; esac compopt -o bashdefault -o default COMPREPLY=( $(compgen -W "$($1 -pnro name)" -- $cur) ) return 0 } complete -F _lsblk_module lsblk