#!/usr/bin/env bash trap "echo Exited!; exit;" SIGINT SIGTERM OLD="$(lsusb)" while true; do watch --chgexit -n0.2 lsusb >& /dev/null NEW="$(lsusb)" diff <(cat <<<"$OLD") <(cat <<<"$NEW") --unified | grep '^[+-]' | grep -Ev '^(---|\+\+\+)' | while read line; do echo "$line" ID="$( echo "$line" | cut -c2- | cut -d' ' -f-6 )" LABEL="$(echo "$line" | cut -c2- | cut -d' ' -f7- )" case "$line" in \+*) notify-send --icon=device --expire-time=500 "New device connected" "${LABEL} ($ID)" ;; \-*) notify-send --icon=device --expire-time=500 "Device disconnected" "${LABEL} ($ID)" ;; esac done OLD="$NEW" done