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 "$@"
|