> Another issue is that some filenames have '-' in them, but the module > names have '_' in them.
This is a problem because the modules filenames are a mess. Some filenames have an underscore '_' too. > Does the current solution filter out > duplicates due to the modulename and filename not being the same > (i.e. '-' vs. '_')? If you want to get (all available mods) minus (already loaded mods) a solution is to change hyphen '-' to underscore '_' in the filenames, but not the opposite. This is because the output of "lsmod" or "/proc/modules" is always with underscore. I try this modification (and renaming) of you functions --------------------------------------- function _sort_all_mods { find /lib/modules/$(uname -r) -type f -name \*.ko|sed 's|.*/||g;s|[.]ko$||'|sort -u|tr - _ } function _loaded_mods_regexp { local a a=$(awk '{print $1}' /proc/modules|sort -u|sed 's/^/^/;s/$/$/'|tr "\n" '|') echo ${a%|} } function _newmods { declare cur prev words cword _get_comp_words_by_ref cur COMPREPLY=( $(compgen -W "$(_sort_all_mods|grep -E -v "$(_loaded_mods_regexp)")" -- "$cur" ) ) } complete -F _newmods modprobe --------------------------------------- Using the functions above I get the right filtering $ _sort_all_mods | wc -l 2542 $ _loaded_mods_regexp | tr '|' "\n" | wc -l 79 $ _sort_all_mods | grep -E -v "$(_loaded_mods_regexp)" | wc -l 2463 $ echo 2542 - 79 | bc 2463 > So sounds like using a modified function based on the function > I used and your optimizations would "ignore" the problem of the > extra links? Your solution works because uses command "find", which ignore links by default. I mean, "find" is equivalent to "find -P". Regards, FA