summaryrefslogtreecommitdiff
path: root/completions/mount
blob: 6818ac39e5bfade3b7d9e0b2cf855208af419062 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# mount(8) completion                                      -*- shell-script -*-

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 0
            ;;
    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 0
        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 |
                sed -ne '/^['"$'\t '"']*Sharename/,/^$/p' |
                sed -ne '3,$s|^[^A-Za-z]*\([^'"$'\t '"']*\).*$|/\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 "$( mount | 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: ts=4 sw=4 et filetype=sh