[ SYSTEM ]: Linux srv.persadacompanies.com 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
[ SERVER ]: Apache | PHP: 8.4.19
[ USER ]: persadamedika | IP: 45.64.1.108
GEFORCE FILE MANAGER
/
usr
/
share
/
bash-completion
/
completions
/
UPLOAD:
NAME
SIZE
QUICK PERMS
ACTIONS
📄 addpart
447 B
SET
[ EDIT ]
|
[ DEL ]
📄 blkdiscard
639 B
SET
[ EDIT ]
|
[ DEL ]
📄 blkid
2,094 B
SET
[ EDIT ]
|
[ DEL ]
📄 blkzone
971 B
SET
[ EDIT ]
|
[ DEL ]
📄 blockdev
726 B
SET
[ EDIT ]
|
[ DEL ]
📄 bootctl
1,937 B
SET
[ EDIT ]
|
[ DEL ]
📄 busctl
8,015 B
SET
[ EDIT ]
|
[ DEL ]
📄 bwrap
919 B
SET
[ EDIT ]
|
[ DEL ]
📄 cal
426 B
SET
[ EDIT ]
|
[ DEL ]
📄 cfdisk
546 B
SET
[ EDIT ]
|
[ DEL ]
📄 chcpu
1,510 B
SET
[ EDIT ]
|
[ DEL ]
📄 chfn
445 B
SET
[ EDIT ]
|
[ DEL ]
📄 chmem
501 B
SET
[ EDIT ]
|
[ DEL ]
📄 chrt
920 B
SET
[ EDIT ]
|
[ DEL ]
📄 chsh
504 B
SET
[ EDIT ]
|
[ DEL ]
📄 col
460 B
SET
[ EDIT ]
|
[ DEL ]
📄 colcrt
484 B
SET
[ EDIT ]
|
[ DEL ]
📄 colrm
509 B
SET
[ EDIT ]
|
[ DEL ]
📄 column
725 B
SET
[ EDIT ]
|
[ DEL ]
📄 coredumpctl
3,715 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpupower
3,503 B
SET
[ EDIT ]
|
[ DEL ]
📄 ctrlaltdel
335 B
SET
[ EDIT ]
|
[ DEL ]
📄 delpart
526 B
SET
[ EDIT ]
|
[ DEL ]
📄 devlink
27,404 B
SET
[ EDIT ]
|
[ DEL ]
📄 dkms.bash-completion
2,673 B
SET
[ EDIT ]
|
[ DEL ]
📄 dmesg
1,182 B
SET
[ EDIT ]
|
[ DEL ]
📄 dnf
10,212 B
SET
[ EDIT ]
|
[ DEL ]
📄 dracut
3,580 B
SET
[ EDIT ]
|
[ DEL ]
📄 eject
1,189 B
SET
[ EDIT ]
|
[ DEL ]
📄 ethtool
24,075 B
SET
[ EDIT ]
|
[ DEL ]
📄 fallocate
721 B
SET
[ EDIT ]
|
[ DEL ]
📄 fdformat
566 B
SET
[ EDIT ]
|
[ DEL ]
📄 fdisk
1,834 B
SET
[ EDIT ]
|
[ DEL ]
📄 fincore
916 B
SET
[ EDIT ]
|
[ DEL ]
📄 findfs
695 B
SET
[ EDIT ]
|
[ DEL ]
📄 findmnt
3,154 B
SET
[ EDIT ]
|
[ DEL ]
📄 firewall-cmd
10,604 B
SET
[ EDIT ]
|
[ DEL ]
📄 flock
874 B
SET
[ EDIT ]
|
[ DEL ]
📄 fsck
787 B
SET
[ EDIT ]
|
[ DEL ]
📄 fsck.cramfs
684 B
SET
[ EDIT ]
|
[ DEL ]
📄 fsck.minix
383 B
SET
[ EDIT ]
|
[ DEL ]
📄 fsfreeze
524 B
SET
[ EDIT ]
|
[ DEL ]
📄 fstrim
677 B
SET
[ EDIT ]
|
[ DEL ]
📄 fwupdagent
610 B
SET
[ EDIT ]
|
[ DEL ]
📄 fwupdmgr
3,741 B
SET
[ EDIT ]
|
[ DEL ]
📄 fwupdtool
3,341 B
SET
[ EDIT ]
|
[ DEL ]
📄 gapplication
1,389 B
SET
[ EDIT ]
|
[ DEL ]
📄 gdbus
935 B
SET
[ EDIT ]
|
[ DEL ]
📄 getopt
815 B
SET
[ EDIT ]
|
[ DEL ]
📄 grub
11,681 B
SET
[ EDIT ]
|
[ DEL ]
📄 gsettings
2,829 B
SET
[ EDIT ]
|
[ DEL ]
📄 hexdump
1,007 B
SET
[ EDIT ]
|
[ DEL ]
📄 hostnamectl
2,281 B
SET
[ EDIT ]
|
[ DEL ]
📄 hwclock
938 B
SET
[ EDIT ]
|
[ DEL ]
📄 ionice
1,161 B
SET
[ EDIT ]
|
[ DEL ]
📄 ipcmk
576 B
SET
[ EDIT ]
|
[ DEL ]
📄 ipcrm
1,423 B
SET
[ EDIT ]
|
[ DEL ]
📄 ipcs
514 B
SET
[ EDIT ]
|
[ DEL ]
📄 isosize
529 B
SET
[ EDIT ]
|
[ DEL ]
📄 journalctl
5,892 B
SET
[ EDIT ]
|
[ DEL ]
📄 kernel-install
1,810 B
SET
[ EDIT ]
|
[ DEL ]
📄 kmod
3,235 B
SET
[ EDIT ]
|
[ DEL ]
📄 last
949 B
SET
[ EDIT ]
|
[ DEL ]
📄 ldattach
1,472 B
SET
[ EDIT ]
|
[ DEL ]
📄 localectl
3,739 B
SET
[ EDIT ]
|
[ DEL ]
📄 logger
1,553 B
SET
[ EDIT ]
|
[ DEL ]
📄 loginctl
4,251 B
SET
[ EDIT ]
|
[ DEL ]
📄 look
683 B
SET
[ EDIT ]
|
[ DEL ]
📄 losetup
1,721 B
SET
[ EDIT ]
|
[ DEL ]
📄 lsblk
1,961 B
SET
[ EDIT ]
|
[ DEL ]
📄 lscpu
1,018 B
SET
[ EDIT ]
|
[ DEL ]
📄 lsinitrd
1,983 B
SET
[ EDIT ]
|
[ DEL ]
📄 lsipc
1,310 B
SET
[ EDIT ]
|
[ DEL ]
📄 lslocks
1,069 B
SET
[ EDIT ]
|
[ DEL ]
📄 lslogins
1,704 B
SET
[ EDIT ]
|
[ DEL ]
📄 lsmem
1,054 B
SET
[ EDIT ]
|
[ DEL ]
📄 lsns
1,167 B
SET
[ EDIT ]
|
[ DEL ]
📄 mcookie
599 B
SET
[ EDIT ]
|
[ DEL ]
📄 mesg
412 B
SET
[ EDIT ]
|
[ DEL ]
📄 mkfs
638 B
SET
[ EDIT ]
|
[ DEL ]
📄 mkfs.cramfs
821 B
SET
[ EDIT ]
|
[ DEL ]
📄 mkfs.minix
714 B
SET
[ EDIT ]
|
[ DEL ]
📄 mkswap
841 B
SET
[ EDIT ]
|
[ DEL ]
📄 mokutil
1,177 B
SET
[ EDIT ]
|
[ DEL ]
📄 more
528 B
SET
[ EDIT ]
|
[ DEL ]
📄 mountpoint
487 B
SET
[ EDIT ]
|
[ DEL ]
📄 namei
500 B
SET
[ EDIT ]
|
[ DEL ]
📄 nmcli
3,841 B
SET
[ EDIT ]
|
[ DEL ]
📄 nsenter
1,171 B
SET
[ EDIT ]
|
[ DEL ]
📄 p11-kit
520 B
SET
[ EDIT ]
|
[ DEL ]
📄 partx
1,249 B
SET
[ EDIT ]
|
[ DEL ]
📄 pip3
286 B
SET
[ EDIT ]
|
[ DEL ]
📄 pivot_root
387 B
SET
[ EDIT ]
|
[ DEL ]
📄 portablectl
3,986 B
SET
[ EDIT ]
|
[ DEL ]
📄 prlimit
1,329 B
SET
[ EDIT ]
|
[ DEL ]
📄 raw
482 B
SET
[ EDIT ]
|
[ DEL ]
📄 readprofile
679 B
SET
[ EDIT ]
|
[ DEL ]
📄 rename
655 B
SET
[ EDIT ]
|
[ DEL ]
📄 renice
784 B
SET
[ EDIT ]
|
[ DEL ]
📄 resizepart
568 B
SET
[ EDIT ]
|
[ DEL ]
📄 resolvectl
7,066 B
SET
[ EDIT ]
|
[ DEL ]
📄 rev
432 B
SET
[ EDIT ]
|
[ DEL ]
📄 rfkill
929 B
SET
[ EDIT ]
|
[ DEL ]
📄 rtcwake
1,081 B
SET
[ EDIT ]
|
[ DEL ]
📄 runuser
864 B
SET
[ EDIT ]
|
[ DEL ]
📄 script
667 B
SET
[ EDIT ]
|
[ DEL ]
📄 scriptreplay
625 B
SET
[ EDIT ]
|
[ DEL ]
📄 semanage
6,570 B
SET
[ EDIT ]
|
[ DEL ]
📄 setarch
790 B
SET
[ EDIT ]
|
[ DEL ]
📄 setpriv
2,370 B
SET
[ EDIT ]
|
[ DEL ]
📄 setsebool
1,816 B
SET
[ EDIT ]
|
[ DEL ]
📄 setsid
440 B
SET
[ EDIT ]
|
[ DEL ]
📄 setterm
2,591 B
SET
[ EDIT ]
|
[ DEL ]
📄 sfdisk
2,012 B
SET
[ EDIT ]
|
[ DEL ]
📄 su
864 B
SET
[ EDIT ]
|
[ DEL ]
📄 swaplabel
635 B
SET
[ EDIT ]
|
[ DEL ]
📄 swapoff
743 B
SET
[ EDIT ]
|
[ DEL ]
📄 swapon
1,529 B
SET
[ EDIT ]
|
[ DEL ]
📄 syspurpose
720 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemctl
13,575 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-analyze
6,788 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-cat
1,911 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-cgls
2,344 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-cgtop
2,096 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-delta
1,951 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-detect-virt
1,361 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-path
1,901 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-resolve
3,189 B
SET
[ EDIT ]
|
[ DEL ]
📄 systemd-run
4,869 B
SET
[ EDIT ]
|
[ DEL ]
📄 taskset
1,207 B
SET
[ EDIT ]
|
[ DEL ]
📄 timedatectl
2,984 B
SET
[ EDIT ]
|
[ DEL ]
📄 trust
2,040 B
SET
[ EDIT ]
|
[ DEL ]
📄 tuned-adm
604 B
SET
[ EDIT ]
|
[ DEL ]
📄 udevadm
3,766 B
SET
[ EDIT ]
|
[ DEL ]
📄 ul
655 B
SET
[ EDIT ]
|
[ DEL ]
📄 unshare
809 B
SET
[ EDIT ]
|
[ DEL ]
📄 utmpdump
475 B
SET
[ EDIT ]
|
[ DEL ]
📄 uuidgen
657 B
SET
[ EDIT ]
|
[ DEL ]
📄 uuidparse
727 B
SET
[ EDIT ]
|
[ DEL ]
📄 wall
634 B
SET
[ EDIT ]
|
[ DEL ]
📄 wdctl
1,371 B
SET
[ EDIT ]
|
[ DEL ]
📄 whereis
535 B
SET
[ EDIT ]
|
[ DEL ]
📄 wipefs
1,192 B
SET
[ EDIT ]
|
[ DEL ]
📄 write
431 B
SET
[ EDIT ]
|
[ DEL ]
📄 zramctl
1,273 B
SET
[ EDIT ]
|
[ DEL ]
DELETE SELECTED
[ CLOSE ]
EDIT: ethtool
# bash completion for ethtool(8) -*- shell-script -*- # shellcheck shell=bash disable=SC2207 # Complete a word representing a set of characters. # @param $@ chars Characters which may be present in completed set. _ethtool_compgen_letterset() { local char for char; do case "$cur" in *"$char"*) # $cur already contains $char ;; *) COMPREPLY+=( "$cur$char" ) ;; esac done } # Generate completions for words matched case-insensitively # @param $@ choices Completion choices. _ethtool_compgen_nocase() { local reset reset=$( shopt -p nocasematch ) shopt -s nocasematch local choice for choice; do case "$choice" in "$cur"*) COMPREPLY+=( "$choice" ) ;; esac done $reset } # Gets names from a section of ethtool output. # @param $1 section_bre POSIX BRE matching section heading (without : at end). # @param $@ ethtool arguments _ethtool_get_names_in_section() { local section_bre="$1" shift PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \ ethtool "$@" 2>/dev/null | command sed -n " # Line is section heading iff it ends with : # From requested section heading to next section heading /^$section_bre:$/,/:$/ { # If line is section heading, ignore it /:$/d # Remove value and separator, if present s/[[:space:]]*:.*// # Remove leading space, if present s/^[[:space:]]*// # Print the line p }" } # Complete an RSS Context ID _ethtool_context() { COMPREPLY=( $(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \ ethtool --show-nfc "${words[2]}" 2>/dev/null | command sed -n 's/^[[:space:]]*RSS Context ID:[[:space:]]*\([0-9]*\)$/\1/p' | sort -u) ) } # Complete a network flow traffic type # Available OPTIONS: # --hash Complete only types suitable for rx hashing _ethtool_flow_type() { local types='ah4 ah6 esp4 esp6 ether sctp4 sctp6 tcp4 tcp6 udp4 udp6' if [ "${1-}" != --hash ]; then types="$types ip4 ip6" fi COMPREPLY=( $( compgen -W "$types" -- "$cur" ) ) } # Completion for ethtool --change _ethtool_change() { local -A settings=( [advertise]=notseen [autoneg]=notseen [duplex]=notseen [mdix]=notseen [msglvl]=notseen [port]=notseen [phyad]=notseen [speed]=notseen [wol]=notseen [xcvr]=notseen [lanes]=notseen ) local -A msgtypes=( [drv]=notseen [hw]=notseen [ifdown]=notseen [ifup]=notseen [intr]=notseen [link]=notseen [pktdata]=notseen [probe]=notseen [rx_err]=notseen [rx_status]=notseen [timer]=notseen [tx_done]=notseen [tx_err]=notseen [tx_queued]=notseen [wol]=notseen ) # Mark seen settings and msgtypes, and whether in msglvl sub-command local in_msglvl= local word for word in "${words[@]:3:${#words[@]}-4}"; do if [ "$in_msglvl" ] && [ "${msgtypes[$word]+set}" ]; then msgtypes[$word]=seen elif [ "${settings[$word]+set}" ]; then settings[$word]=seen if [ "$word" = msglvl ]; then in_msglvl=1 else in_msglvl= fi fi done if [ "$in_msglvl" ] && [ "${msgtypes[$prev]+set}" ]; then # All msgtypes take an on/off argument COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return fi case "$prev" in advertise) # Hex number return ;; autoneg) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; duplex) COMPREPLY=( $( compgen -W 'half full' -- "$cur" ) ) return ;; mdix) COMPREPLY=( $( compgen -W 'auto on off' -- "$cur" ) ) return ;; msglvl) # Unsigned integer or msgtype COMPREPLY=( $( compgen -W "${!msgtypes[*]}" -- "$cur" ) ) return ;; port) COMPREPLY=( $( compgen -W 'aui bnc fibre mii tp' -- "$cur" ) ) return ;; phyad) # Integer return ;; sopass) _mac_addresses return ;; speed) # Number return ;; wol) # $cur is a set of wol type characters. _ethtool_compgen_letterset p u m b a g s f d return ;; xcvr) COMPREPLY=( $( compgen -W 'internal external' -- "$cur" ) ) return ;; lanes) # Number return ;; esac local -a comp_words=() # Add settings not seen to completions local setting for setting in "${!settings[@]}"; do if [ "${settings[$setting]}" = notseen ]; then comp_words+=( "$setting" ) fi done # Add settings not seen to completions if [ "$in_msglvl" ]; then local msgtype for msgtype in "${!msgtypes[@]}"; do if [ "${msgtypes[$msgtype]}" = notseen ]; then comp_words+=( "$msgtype" ) fi done fi COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) ) } # Completion for ethtool --change-eeprom _ethtool_change_eeprom() { local -A settings=( [length]=1 [magic]=1 [offset]=1 [value]=1 ) if [ "${settings[$prev]+set}" ]; then # All settings take an unsigned integer argument return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --coalesce _ethtool_coalesce() { local -A settings=( [adaptive-rx]=1 [adaptive-tx]=1 [pkt-rate-high]=1 [pkt-rate-low]=1 [rx-frames]=1 [rx-frames-high]=1 [rx-frames-irq]=1 [rx-frames-low]=1 [rx-usecs]=1 [rx-usecs-high]=1 [rx-usecs-irq]=1 [rx-usecs-low]=1 [sample-interval]=1 [stats-block-usecs]=1 [tx-frames]=1 [tx-frames-high]=1 [tx-frames-irq]=1 [tx-frames-low]=1 [tx-usecs]=1 [tx-usecs-high]=1 [tx-usecs-irq]=1 [tx-usecs-low]=1 ) case "$prev" in adaptive-rx|\ adaptive-tx) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; esac if [ "${settings[$prev]+set}" ]; then # Unsigned integer return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --config-nfc <devname> flow-type _ethtool_config_nfc_flow_type() { if [ "$cword" -eq 4 ]; then _ethtool_flow_type --spec return fi case "$prev" in context) _ethtool_context return ;; dst|\ dst-mac|\ src) # TODO: Complete only local for dst and remote for src _mac_addresses return ;; dst-ip) # Note: RX classification, so dst is usually local case "${words[4]}" in *4) _ip_addresses -4 return ;; *6) _ip_addresses -6 return ;; esac return ;; src-ip) # Note: RX classification, so src is usually remote # TODO: Remote IP addresses (ARP cache + /etc/hosts + ?) return ;; m|\ *-mask) # MAC, IP, or integer bitmask return ;; esac local -A settings=( [action]=1 [context]=1 [loc]=1 [queue]=1 [vf]=1 ) if [ "${settings[$prev]+set}" ]; then # Integer return fi case "${words[4]}" in ah4|\ esp4) local -A fields=( [dst-ip]=1 [dst-mac]=1 [spi]=1 [src-ip]=1 [tos]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; ah6|\ esp6) local -A fields=( [dst-ip]=1 [dst-mac]=1 [spi]=1 [src-ip]=1 [tclass]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; ether) local -A fields=( [dst]=1 [proto]=1 [src]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; ip4) local -A fields=( [dst-ip]=1 [dst-mac]=1 [dst-port]=1 [l4data]=1 [l4proto]=1 [spi]=1 [src-ip]=1 [src-port]=1 [tos]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; ip6) local -A fields=( [dst-ip]=1 [dst-mac]=1 [dst-port]=1 [l4data]=1 [l4proto]=1 [spi]=1 [src-ip]=1 [src-port]=1 [tclass]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; sctp4|\ tcp4|\ udp4) local -A fields=( [dst-ip]=1 [dst-mac]=1 [dst-port]=1 [src-ip]=1 [src-port]=1 [tos]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; sctp6|\ tcp6|\ udp6) local -A fields=( [dst-ip]=1 [dst-mac]=1 [dst-port]=1 [src-ip]=1 [src-port]=1 [tclass]=1 [user-def]=1 [vlan-etype]=1 [vlan]=1 ) ;; *) return ;; esac if [ "${fields[$prev]+set}" ]; then # Integer return fi # If the previous 2 words were a field+value, suggest a mask local mask= if [ "${fields[${words[$cword-2]}]+set}" ]; then mask="m ${words[$cword-2]}-mask" fi # Remove fields and settings which have been seen local word for word in "${words[@]:5:${#words[@]}-6}"; do unset "fields[$word]" "settings[$word]" done # Remove mutually-exclusive options if ! [ "${settings[action]+set}" ]; then unset 'settings[queue]' 'settings[vf]' fi if ! [ "${settings[queue]+set}" ]; then unset 'settings[action]' fi if ! [ "${settings[vf]+set}" ]; then unset 'settings[action]' fi COMPREPLY=( $( compgen -W "$mask ${!fields[*]} ${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --config-nfc _ethtool_config_nfc() { if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W 'delete flow-type rx-flow-hash' -- "$cur" ) ) return fi case "${words[3]}" in delete) # Unsigned integer return ;; flow-type) _ethtool_config_nfc_flow_type return ;; rx-flow-hash) case "$cword" in 4) _ethtool_flow_type --hash return ;; 5) _ethtool_compgen_letterset m v t s d f n r return ;; 6) COMPREPLY=( $( compgen -W context -- "$cur" ) ) return ;; 7) _ethtool_context return ;; esac return ;; esac } # Completion for ethtool --eeprom-dump _ethtool_eeprom_dump() { local -A settings=( [length]=1 [offset]=1 [raw]=1 ) if [ "$prev" = raw ]; then COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return fi if [ "${settings[$prev]+set}" ]; then # Unsigned integer argument return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --features _ethtool_features() { local -A abbreviations=( [generic-receive-offload]=gro [generic-segmentation-offload]=gso [large-receive-offload]=lro [ntuple-filters]=ntuple [receive-hashing]=rxhash [rx-checksumming]=rx [rx-vlan-offload]=rxvlan [scatter-gather]=sg [tcp-segmentation-offload]=tso [tx-checksumming]=tx [tx-vlan-offload]=txvlan [udp-fragmentation-offload]=ufo ) local -A features=() local feature status fixed # shellcheck disable=SC2034 while read -r feature status fixed; do if [ -z "$feature" ]; then # Ignore blank line from empty expansion in here-document continue fi if [ "$feature" = Features ]; then # Ignore heading continue fi if [ "$fixed" = '[fixed]' ]; then # Fixed features can't be changed continue fi feature=${feature%:} if [ "${abbreviations[$feature]+set}" ]; then features[${abbreviations[$feature]}]=1 else features[$feature]=1 fi done <<ETHTOOL_FEATURES $(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \ ethtool --show-features "${words[2]}" 2>/dev/null) ETHTOOL_FEATURES if [ "${features[$prev]+set}" ]; then COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return fi # Remove features which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "features[$word]" done COMPREPLY=( $( compgen -W "${!features[*]}" -- "$cur" ) ) } # Complete the current word as a kernel firmware file (for request_firmware) # See https://www.kernel.org/doc/html/latest/driver-api/firmware/core.html _ethtool_firmware() { local -a firmware_paths=( /lib/firmware/updates/ /lib/firmware/ ) local release if release=$( uname -r 2>/dev/null ); then firmware_paths+=( "/lib/firmware/updates/$release/" "/lib/firmware/$release/" ) fi local fw_path_para if fw_path_para=$( cat /sys/module/firmware_class/parameters/path 2>/dev/null ) \ && [ -n "$fw_path_para" ]; then firmware_paths+=( "$fw_path_para" ) fi local -A firmware_files=() local firmware_path for firmware_path in "${firmware_paths[@]}"; do local firmware_file for firmware_file in "$firmware_path"*; do if [ -f "$firmware_file" ]; then firmware_files[${firmware_file##*/}]=1 fi done done local IFS=' ' COMPREPLY=( $( compgen -W "${!firmware_files[*]}" -- "$cur" ) ) } # Completion for ethtool --flash _ethtool_flash() { if [ "$cword" -eq 3 ]; then _ethtool_firmware return fi } # Completion for ethtool --get-dump _ethtool_get_dump() { case "$cword" in 3) COMPREPLY=( $( compgen -W data -- "$cur" ) ) return ;; 4) # Output filename local IFS=' ' COMPREPLY=( $( compgen -f -- "$cur" ) ) return ;; esac } # Completion for ethtool --get-phy-tunable _ethtool_get_phy_tunable() { if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W downshift -- "$cur" ) ) return fi } # Completion for ethtool --module-info _ethtool_module_info() { local -A settings=( [hex]=1 [length]=1 [offset]=1 [raw]=1 ) case "$prev" in hex|\ raw) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; esac if [ "${settings[$prev]+set}" ]; then # Unsigned integer argument return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --pause _ethtool_pause() { local -A settings=( [autoneg]=1 [rx]=1 [tx]=1 ) if [ "${settings[$prev]+set}" ]; then COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --per-queue _ethtool_per_queue() { local -a subcommands=( --coalesce --show-coalesce ) if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W "queue_mask ${subcommands[*]}" -- "$cur" ) ) return fi local sc_start=3 if [ "${words[3]}" = queue_mask ] ; then case "$cword" in 4) # Hex number return ;; 5) COMPREPLY=( $( compgen -W "${subcommands[*]}" -- "$cur" ) ) return ;; esac sc_start=5 fi case "${words[$sc_start]}" in --coalesce) # Remove --per-queue args to match normal --coalesce invocation local words=( "${words[0]}" --coalesce "${words[2]}" "${words[@]:$sc_start+1:${#words[@]}-$sc_start-1}" ) _ethtool_coalesce return ;; --show-coalesce) # No args return ;; esac } # Completion for ethtool --register-dump _ethtool_register_dump() { local -A settings=( [file]=1 [hex]=1 [raw]=1 ) case "$prev" in hex|\ raw) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; file) local IFS=' ' COMPREPLY=( $( compgen -f -- "$cur" ) ) return ;; esac # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --reset _ethtool_reset() { if [ "$prev" = flags ]; then # Unsigned integer return fi local -A flag_names=( [ap]=1 [dma]=1 [filter]=1 [irq]=1 [mac]=1 [mgmt]=1 [offload]=1 [phy]=1 [ram]=1 ) local -A all_flag_names=() local flag_name for flag_name in "${!flag_names[@]}"; do all_flag_names[$flag_name]=1 all_flag_names[$flag_name-shared]=1 done # Remove all_flag_names which have been seen local any_dedicated= local word for word in "${words[@]:3:${#words[@]}-4}"; do case "$word" in all) # Flags are always additive. # Nothing to add after "all". return ;; dedicated) any_dedicated=1 # "dedicated" sets all non-shared flags for flag_name in "${!flag_names[@]}"; do unset "all_flag_names[$flag_name]" done continue ;; esac if [ "${flag_names[$word]+set}" ]; then any_dedicated=1 fi unset "all_flag_names[$word]" done COMPREPLY=( $( compgen -W "${!all_flag_names[*]}" -- "$cur" ) ) # Although it is permitted to mix named and un-named flags or duplicate # flags with "all" or "dedicated", it's not likely intentional. # Reconsider if a real use-case (or good consistency argument) is found. if [ "$cword" -eq 3 ]; then COMPREPLY+=( all dedicated flags ) elif [ -z "$any_dedicated" ]; then COMPREPLY+=( dedicated ) fi } # Completion for ethtool --rxfh _ethtool_rxfh() { local -A settings=( [context]=1 [default]=1 [delete]=1 [equal]=1 [hfunc]=1 [hkey]=1 [weight]=1 ) case "$prev" in context) _ethtool_context # "new" to create a new context COMPREPLY+=( new ) return ;; equal) # Positive integer return ;; hfunc) # Complete available RSS hash functions COMPREPLY=( $(_ethtool_get_names_in_section 'RSS hash function' \ --show-rxfh "${words[2]}") ) return ;; hkey) # Pairs of hex digits separated by : return ;; weight) # Non-negative integer return ;; esac local word for word in "${words[@]:3:${#words[@]}-4}"; do # Remove settings which have been seen unset "settings[$word]" # Remove settings which are mutually-exclusive with seen settings case "$word" in context) unset 'settings[default]' ;; default) unset \ 'settings[context]' \ 'settings[delete]' \ 'settings[equal]' \ 'settings[weight]' ;; delete) unset \ 'settings[default]' \ 'settings[equal]' \ 'settings[hkey]' \ 'settings[weight]' ;; equal) unset \ 'settings[default]' \ 'settings[delete]' \ 'settings[weight]' ;; hkey) unset 'settings[delete]' ;; weight) unset \ 'settings[default]' \ 'settings[delete]' \ 'settings[equal]' ;; esac done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --set-channels _ethtool_set_channels() { local -A settings=( [combined]=1 [other]=1 [rx]=1 [tx]=1 ) if [ "${settings[$prev]+set}" ]; then # Unsigned integer argument return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --set-eee _ethtool_set_eee() { local -A settings=( [advertise]=1 [eee]=1 [tx-lpi]=1 [tx-timer]=1 ) case "$prev" in advertise|\ tx-timer) # Unsigned integer return ;; eee|\ tx-lpi) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; esac # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --set-fec _ethtool_set_fec() { if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W encoding -- "$cur" ) ) return fi local -A modes=( [auto]=auto [rs]=RS [off]=off [baser]=BaseR ) # Remove modes which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do # ethtool recognizes modes case-insensitively unset "modes[${word,,}]" done _ethtool_compgen_nocase "${modes[@]}" } # Completion for ethtool --set-phy-tunable _ethtool_set_phy_tunable() { case "$cword" in 3) COMPREPLY=( $( compgen -W downshift -- "$cur" ) ) return ;; 4) COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return ;; 5) COMPREPLY=( $( compgen -W count -- "$cur" ) ) return ;; esac } # Completion for ethtool --set-priv-flags _ethtool_set_priv_flags() { if [ $(( cword % 2 )) -eq 0 ]; then COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return fi # Get available private flags local -A flags=() local flag while IFS= read -r flag; do # Ignore blank line from empty here-document if [ -n "$flag" ]; then flags[$flag]=1 fi done <<ETHTOOL_PRIV_FLAGS $(_ethtool_get_names_in_section \ 'Private flags for [[:graph:]]*' --show-priv-flags "${words[2]}") ETHTOOL_PRIV_FLAGS # Remove flags which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "flags[$word]" done COMPREPLY=( $( compgen -W "${!flags[*]}" -- "$cur" ) ) } # Completion for ethtool --set-ring _ethtool_set_ring() { local -A settings=( [rx-jumbo]=1 [rx-mini]=1 [rx]=1 [tx]=1 ) if [ "${settings[$prev]+set}" ]; then # Unsigned integer argument return fi # Remove settings which have been seen local word for word in "${words[@]:3:${#words[@]}-4}"; do unset "settings[$word]" done COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) ) } # Completion for ethtool --show-nfc _ethtool_show_nfc() { if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W 'rule rx-flow-hash' -- "$cur" ) ) return fi case "${words[3]}" in rule) if [ "$cword" -eq 4 ]; then COMPREPLY=( $(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \ ethtool --show-nfc "${words[2]}" 2>/dev/null | command sed -n 's/^Filter:[[:space:]]*\([0-9]*\)$/\1/p') ) fi return ;; rx-flow-hash) case "$cword" in 4) _ethtool_flow_type --hash return ;; 5) COMPREPLY=( $( compgen -W context -- "$cur" ) ) return ;; 6) _ethtool_context return ;; esac ;; esac } # Completion for ethtool --show-rxfh _ethtool_show_rxfh() { case "$cword" in 3) COMPREPLY=( $( compgen -W context -- "$cur" ) ) return ;; 4) _ethtool_context return ;; esac } # Completion for ethtool --test _ethtool_test() { if [ "$cword" -eq 3 ]; then COMPREPLY=( $( compgen -W 'external_lb offline online' -- "$cur" ) ) return fi } # Complete any ethtool command _ethtool() { local cur prev words cword _init_completion || return # Per "Contributing to bash-completion", complete non-duplicate long opts local -A suggested_funcs=( [--change-eeprom]=change_eeprom [--change]=change [--coalesce]=coalesce [--config-nfc]=config_nfc [--driver]=devname [--dump-module-eeprom]=module_info [--eeprom-dump]=eeprom_dump [--features]=features [--flash]=flash [--get-dump]=get_dump [--get-phy-tunable]=get_phy_tunable [--identify]=devname [--module-info]=module_info [--negotiate]=devname [--offload]=features [--pause]=pause [--per-queue]=per_queue [--phy-statistics]=devname [--register-dump]=register_dump [--reset]=reset [--set-channels]=set_channels [--set-dump]=devname [--set-eee]=set_eee [--set-fec]=set_fec [--set-phy-tunable]=set_phy_tunable [--set-priv-flags]=set_priv_flags [--set-ring]=set_ring [--set-rxfh-indir]=rxfh [--show-channels]=devname [--show-coalesce]=devname [--show-eee]=devname [--show-features]=devname [--show-fec]=devname [--show-nfc]=show_nfc [--show-offload]=devname [--show-pause]=devname [--show-permaddr]=devname [--show-priv-flags]=devname [--show-ring]=devname [--show-rxfh]=show_rxfh [--show-time-stamping]=devname [--statistics]=devname [--test]=test ) local -A other_funcs=( [--config-ntuple]=config_nfc [--rxfh]=rxfh [--show-ntuple]=show_nfc [--show-rxfh-indir]=devname [-A]=pause [-C]=coalesce [-E]=change_eeprom [-G]=set_ring [-K]=features [-L]=set_channels [-N]=config_nfc [-P]=devname [-Q]=per_queue [-S]=devname [-T]=devname [-U]=config_nfc [-W]=devname [-X]=rxfh [-a]=devname [-c]=devname [-d]=register_dump [-e]=eeprom_dump [-f]=flash [-g]=devname [-i]=devname [-k]=devname [-l]=devname [-m]=module_info [-n]=show_nfc [-p]=devname [-r]=devname [-s]=change [-t]=test [-u]=show_nfc [-w]=get_dump [-x]=devname ) if [ "$cword" -le 1 ]; then _available_interfaces COMPREPLY+=( $( compgen -W "--help --version ${!suggested_funcs[*]}" -- "$cur" ) ) return fi local func=${suggested_funcs[${words[1]}]-${other_funcs[${words[1]}]-}} if [ "$func" ]; then # All sub-commands have devname as their first argument if [ "$cword" -eq 2 ]; then _available_interfaces return fi if [ "$func" != devname ]; then "_ethtool_$func" fi fi } && complete -F _ethtool ethtool # ex: filetype=sh sts=8 sw=8 ts=8 noet