dotfiles

Alpine Linux dotfiles

git clone git://git.lin.moe/dotfiles.git

 1#!/usr/bin/env sh
 2
 3# TODO:
 4# + remove lsblk and diffutils dependency
 5set -e
 6
 7function usage() {
 8    echo "$(basename $0) [devices...]"
 9}
10
11if [ $# == "0" ]; then
12    usage
13    exit 0
14fi
15
16function _umount_blk_mountpoints() {
17	mounts=$(lsblk -P $@ | grep -oP 'MOUNTPOINTS="\K.*?(?=")')
18
19	if [[ -z $mounts ]]; then
20		return 0
21	fi
22
23	echo "Device $1 mounted on: "
24	for m in $mounts; do
25		echo "* $m"
26	done
27	echo -n "Confirm unmount them? (y/N): "
28	read _umount_confirmed
29	
30	if [ "$_umount_confirmed" = "y" ]; then
31		for m in $mounts; do
32			umount $m
33		done
34		return 0
35	else
36		return 1
37	fi
38}
39
40for dev in $@; do
41	echo "ejecting $dev..."
42	if _umount_blk_mountpoints $dev; then
43		devname=$(basename $dev)
44		if [ ! -d /sys/block/"$devname" ] ; then
45			echo "$dev is not a block device"
46			exit 1
47		fi
48	
49		echo "offline" > "/sys/block/$devname/device/state"
50		echo "1" > "/sys/block/$devname/device/delete"
51	fi
52done 
53