]> git.ipfire.org Git - thirdparty/util-linux.git/blob - bash-completion/umount
bash-completion/umount: shell charaters escape
[thirdparty/util-linux.git] / bash-completion / umount
1 _umount_points_list()
2 {
3 # List of characters to escape shamelessly stolen from "scp" completion
4 local escape_chars='[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]'
5
6 findmnt -lno TARGET | awk '{
7 if ($0 ~ "^"ENVIRON["HOME"]) {
8 homeless = $0
9 sub("^"ENVIRON["HOME"], "~", homeless)
10 gsub("'"$escape_chars"'", "\\\\&", homeless)
11 print homeless " "
12 }
13 if ($0 ~ "^"ENVIRON["PWD"]) {
14 reldir = $0
15 sub("^"ENVIRON["PWD"]"/?", "", reldir)
16 gsub("'"$escape_chars"'", "\\\\&", reldir)
17 print "./" reldir " "
18 print reldir " "
19 }
20 gsub("'"$escape_chars"'", "\\\\&")
21 print $0 " "
22 }'
23 }
24
25 _umount_module()
26 {
27 local cur prev OPTS
28 COMPREPLY=()
29 cur="${COMP_WORDS[COMP_CWORD]}"
30 prev="${COMP_WORDS[COMP_CWORD-1]}"
31 case $prev in
32 '-t'|'--types')
33 local TYPES
34 TYPES="
35 $(\ls /lib/modules/$(uname -r)/kernel/fs | awk '{print $1, "no" $1}')
36 $(awk '{print $NF, "no" $NF}' /proc/filesystems)
37 "
38 COMPREPLY=( $(compgen -W "$TYPES" -- $cur) )
39 return 0
40 ;;
41 '-h'|'--help'|'-V'|'--version')
42 return 0
43 ;;
44 '-N'|'--namespace')
45 local NAMESPACE
46 NAMESPACE="$(lsns --type mnt --output PATH --noheadings)"
47 COMPREPLY=( $(compgen -W "$NAMESPACE" -- $cur) )
48 return 0
49 ;;
50 esac
51 case $cur in
52 -*)
53 OPTS=" --all
54 --all-targets
55 --no-canonicalize
56 --detach-loop
57 --fake
58 --force
59 --internal-only
60 --namespace
61 --no-mtab
62 --lazy
63 --test-opts
64 --recursive
65 --read-only
66 --types
67 --quiet
68 --verbose
69 --help
70 --version"
71 COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
72 return 0
73 ;;
74 esac
75
76 local IFS=$'\n'
77 COMPREPLY=( $( compgen -W '$( _umount_points_list )' -- "$cur" ) )
78 }
79 complete -F _umount_module -o nospace umount