aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/pmount
blob: 2022c10ea6ce4388ebe10ecddee2238741634f96 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash

set -e

declare -a devices

populate_devices()
{
    for devsys in /sys/class/block/sd*; do
        case $(readlink $devsys) in
            */devices/*/usb*/*/block/sd*[a-z]);;
            # Skip non removable devices (/removable in sys is not reliable
            # for usb3 disks). My definition of a removable device in this
            # script is usb devices for now.
            *) continue;;
        esac
        dev=${devsys##/sys/class/block/}
        if [ -e /sys/class/block/$dev/${dev}1 ]; then
            for subdev in /sys/class/block/$dev/${dev}*; do
                subdev=${subdev##/sys/class/block/$dev/}
                if ! mount | grep -q "^/dev/$subdev on /media/"; then
                    devices+=($subdev)
                fi
            done
        else
            if ! mount | grep -q "^/dev/$dev on /media/"; then
                devices+=($dev)
            fi
        fi
    done
}

get_label()
{
    dev=$1
    for label in /dev/disk/by-label/*; do
        label=${label##*/}
        devfound=$(readlink /dev/disk/by-label/$label)
        devfound=${devfound##*/}
        if [ "$devfound" == "$dev" ]; then
            echo $label
            return
        fi
    done
    echo $dev
}

choose_device()
{
    echo "List of mountable devices (${#devices[*]}):"
    format="  %-8s %s\n"
    printf "$format" =Device= =Label=
    for dev in ${devices[*]}; do
        printf "$format" $dev "$(get_label $dev)"
    done

    select choice in ${devices[@]}; do
        REPLY=$((REPLY-1))
        break
    done
}

if [ "$#" -eq 0 ]; then
    populate_devices
    if [ ${#devices[*]} -eq 0 ]; then
        echo "Nothing can be done, bye."
        exit 0
    fi

    if [ ${#devices[*]} -eq 1 ]; then
        dev=${devices[0]}
        label="$(get_label ${devices[0]})"
    else
        choose_device
        dev=${devices[$REPLY]}
        label="$(get_label $dev)"
    fi

    echo "mounting /dev/$dev in /media/$label"
    exec pmount $dev "$label"
fi

exec /usr/bin/pmount "$@"