-
-
Save upsuper/28ceedcf6ab74a3c3e947b9ba14d4883 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
SERIAL="00000000" | |
echo "Looking for device with serial $SERIAL..." | |
for d in /sys/bus/usb/devices/*-*; do | |
if [[ -f "$d/serial" ]]; then | |
serial=$(<"$d/serial") | |
if [[ "$serial" = "$SERIAL" ]]; then | |
device="$(basename $d)" | |
break | |
fi | |
fi | |
done | |
if [[ -z "$device" ]]; then | |
echo "Fail to find device with serial $SERIAL" | |
exit 1 | |
fi | |
echo "Binding device $device..." | |
echo "$device" > /sys/bus/usb/drivers/usb/bind || exit 1 | |
echo -n "Waiting for filesystem to mount... " | |
exec 3< <(tail -f -n1 /var/log/kern.log) | |
while read line; do | |
if [[ "$line" = *"[EXFAT] mounted successfully" ]]; then | |
echo "Mounted!" | |
break | |
elif [[ "$line" = *"usb $device: "* && "$line" = *" error "* ]]; then | |
echo "Error!" | |
exit 1 | |
fi | |
done <&3 | |
echo -n "Waiting for filesystem to unmount... " | |
while read line; do | |
if [[ "$line" = *"[EXFAT] unmounted successfully" ]]; then | |
echo "Unmounted!" | |
break; | |
fi | |
done <&3 | |
echo "Unbinding device $device..." | |
echo "$device" > /sys/bus/usb/drivers/usb/unbind |
Also, un-mounting (=ejecting) the device via the GUI just adds one single line to kern.log:
so I suppose the next part of the script also won't recognize unmounting the hdd
Also, don't you need to put
exec 3< <(tail -f -n1 /var/log/kern.log)
in front of
echo -n "Waiting for filesystem to unmount... " while read line; do if [[ "$line" = *"[EXFAT] unmounted successfully" ]]; then echo "Unmounted!" break; fi done <&3
, as well, in order to read the kern.log?
Thanks!
The script here relies on the log from kernel, and it apparently supports only exFAT filesystem. I have no idea about your system and external disk so I can't really provide any advice. There is probably a better way to detect mounting and unmounting... but as it's working for me, I'm not very motivated to investigate further.
Also, don't you need to put
exec 3< <(tail -f -n1 /var/log/kern.log)
in front of
no, actually that would probably be wrong, IIRC. The previous one would be reused by the second loop.
That's right.