A much lower-effort solution, if you can hear: "some_command; say 'done'". (Replace 'say' with 'espeak' on Linux.)<p>I personally went kinda crazy in this direction, and made 'judge some_command', which, depending on exit status, runs either 'yay' or 'boom', themselves custom commands which play clapping or explosion sounds.<p>So I can do 'judge run_tests' or 'run_tests; judge' and hear what happened. (The latter form is nice if I realize after the command started that I want notification - I just type it and hit enter while waiting for the first command to finish.)<p><a href="https://github.com/nathanl/.dotfiles/blob/64b0ae9e53c0bbf9c5b6b162754237251cedbac4/zsh/aliases#L65-L91" rel="nofollow">https://github.com/nathanl/.dotfiles/blob/64b0ae9e53c0bbf9c5...</a>
There's also noti (<a href="https://github.com/variadico/noti" rel="nofollow">https://github.com/variadico/noti</a>), which I use. Just add noti to the beginning of a command you run (i.e. "noti eb deploy"), and you'll get a notification when it finishes.
I have a bell character in my prompt and my terminals (on osx and Linux) configured to do visual signaling on bell instead of making noise. This works even with remote hosts and uniformly across platforms.