1#!/usr/bin/env sh23# TODO:4# + remove lsblk and diffutils dependency5set -e67function usage() {8 echo "$(basename $0) [devices...]"9}1011if [ $# == "0" ]; then12 usage13 exit 014fi1516function _umount_blk_mountpoints() {17 mounts=$(lsblk -P $@ | grep -oP 'MOUNTPOINTS="\K.*?(?=")')1819 if [[ -z $mounts ]]; then20 return 021 fi2223 echo "Device $1 mounted on: "24 for m in $mounts; do25 echo "* $m"26 done27 echo -n "Confirm unmount them? (y/N): "28 read _umount_confirmed2930 if [ "$_umount_confirmed" = "y" ]; then31 for m in $mounts; do32 umount $m33 done34 return 035 else36 return 137 fi38}3940for dev in $@; do41 echo "ejecting $dev..."42 if _umount_blk_mountpoints $dev; then43 devname=$(basename $dev)44 if [ ! -d /sys/block/"$devname" ] ; then45 echo "$dev is not a block device"46 exit 147 fi4849 echo "offline" > "/sys/block/$devname/device/state"50 echo "1" > "/sys/block/$devname/device/delete"51 fi52done53