summaryrefslogtreecommitdiff
path: root/bin/menuscripts/aumount
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-06 15:29:58 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-06 15:29:58 +0200
commitad05cb18f03f3a97a918e090c38ba760147a0bb6 (patch)
tree233097b3ccbf1a4fef18a291d0d8fda3fba34c03 /bin/menuscripts/aumount
parent1a7e35285abb5db60d2e1544ce0100e82c5d3490 (diff)
parent511b6c1bc9acd9e6029d08a6c448f6e0037755fb (diff)
Merge branch 'main' of db:dotfiles
Diffstat (limited to 'bin/menuscripts/aumount')
-rwxr-xr-xbin/menuscripts/aumount97
1 files changed, 97 insertions, 0 deletions
diff --git a/bin/menuscripts/aumount b/bin/menuscripts/aumount
new file mode 100755
index 0000000..8a2b785
--- /dev/null
+++ b/bin/menuscripts/aumount
@@ -0,0 +1,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