summaryrefslogtreecommitdiffstats
path: root/completions/_mount
diff options
context:
space:
mode:
Diffstat (limited to 'completions/_mount')
-rw-r--r--completions/_mount65
1 files changed, 65 insertions, 0 deletions
diff --git a/completions/_mount b/completions/_mount
new file mode 100644
index 0000000..85f5490
--- /dev/null
+++ b/completions/_mount
@@ -0,0 +1,65 @@
+# mount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+if [[ $OSTYPE == *linux* ]]; then
+ . "$BASH_SOURCE.linux"
+ return
+fi
+
+# This will pull a list of possible mounts out of
+# /etc/{,v}fstab, unless the word being completed contains a ':', which
+# would indicate the specification of an NFS server. In that case, we
+# query the server for a list of all available exports and complete on
+# that instead.
+#
+_mount()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local sm host
+
+ case $prev in
+ -t | --types)
+ _fstypes
+ return
+ ;;
+ esac
+
+ [[ $cur == \\ ]] && cur="/"
+
+ if [[ $cur == *:* ]]; then
+ for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
+ [[ -x $sm ]] || continue
+ COMPREPLY=($(compgen -W "$("$sm" -e ${cur%%:*} |
+ awk 'NR>1 {print $1}')" -- "${cur#*:}"))
+ return
+ done
+ fi
+
+ if [[ $cur == //* ]]; then
+ host=${cur#//}
+ host=${host%%/*}
+ if [[ -n $host ]]; then
+ COMPREPLY=($(compgen -P "//$host" -W \
+ "$(smbclient -d 0 -NL $host 2>/dev/null |
+ command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
+ command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p')" \
+ -- "${cur#//$host}"))
+ fi
+ elif [[ -r /etc/vfstab ]]; then
+ # Solaris
+ COMPREPLY=($(compgen -W "$(awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' /etc/vfstab)" -- "$cur"))
+ elif [[ ! -e /etc/fstab ]]; then
+ # probably Cygwin
+ COMPREPLY=($(compgen -W "$($1 | awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}')" -- "$cur"))
+ else
+ # probably BSD
+ COMPREPLY=($(compgen -W "$(awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' /etc/fstab)" -- "$cur"))
+ fi
+} &&
+ complete -F _mount -o default -o dirnames mount
+
+# ex: filetype=sh