summaryrefslogtreecommitdiff
path: root/bin/common/aumount
blob: 8a2b78540d138cad41db6e8234f1f282100b60f9 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/sh

tmp="$(mktemp)"
test "$(id -u)" != "0" && sudo="sudo"

logn () { >&2 printf "%s\n" "$@"; }
log () { >&2 printf '%s' "$@"; }

# Read one character
read_char ()
{
	log ">"
	old_stty_cfg=$(stty -g)
	stty raw
	dd ibs=1 count=1 2> /dev/null
	stty "$old_stty_cfg"
	logn ""
}

get_dev () { grep "^$1\." "$tmp" | cut -f 2- -d ' '; }

# mount the device with $1 as the choice
mount ()
{
	dev="$(get_dev "$1")"
	test -z "$dev" && exit 1

	logn "Mounting /dev/$dev on /media/$dev"
	mkdir -p /media/"$dev"
	$sudo mount /dev/"$dev" /media/"$dev" > /dev/null 2>&1 ||
		return 1
}

# umount the device with $1 as the choice
umount ()
{
	mountpoint="$(sed -n "${1}p" "$tmp" | awk '{print $3}')"
	test -z "$mountpoint" && exit 1

	logn "Unmounting $mountpoint"
	$sudo umount "$mountpoint" ||
		return 1
}

ejekt ()
{
	dev="$(get_dev "$1" | sed 's/.$//')"
	test -z "$dev" && exit 1

	logn "Ejecting /dev/$dev"
	$sudo eject /dev/"$dev" > /dev/null 2>&1 ||
		return 1
}

# print lsblk, use $1 to print only devices with mountpoints or without
pr_lsblk ()
{
	clear
	lsblk -o name,size,type,mountpoint
	logn "───────────────────────────────────"
	lsblk --ascii -o name,mountpoint |
		grep '^.-' |
		while read -r line
	do
		words="$(printf "%s" "$line" | wc -w)"
		test "$words" -eq "${1:-1}" && continue 
		printf "%s\n" "$line"
	done |
		cut -f 2- -d "-" |
		awk '{print NR ". " $0}' |
		tee "$tmp" >&2
}

cleanup () { rm -f "$tmp"; }

trap cleanup EXIT INT

logn "m(ount) u(mount) (e)ject ?"
choice="$(read_char)"

case $choice in
	"m") i=2; cmd=mount ;;
	"u") i=1; cmd=umount ;;
	"e") i=2; cmd=ejekt ;;
	*) exit 1 ;;
esac

pr_lsblk "$i"
choice="$(read_char)"
printf "%s" "$choice" | grep -q "[0-9]" || exit 1

if $cmd "$choice"
then
	logn "Successful."
else
	logn "Failed."
fi