Q:

How can we play sound alarm after command is done on Mac terminal? 

When we run a command that takes a while such as source compile or brew upgrade, we usually do other things such as web searching rather than watching the command running the whole time. 
Is there any possible way that I can get notified once the command is done? 
brew upgrade | afplay /System/Library/Sounds/Submarine.aiff -v 10

I tried with afplay on Mac as above but the problem is a) stdout is not shown due to the pipe, b) it plays the sound right after the command starts to run rather than waiting until "brew upgrade" is finished. 
Any suggestions please? 

A:

brew upgrade && say brew upgrade done
leverage the say command and get a custom voice notification
general example:
YOUR_COMMAND && say YOUR_COMMAND done

A:

I think you need
brew upgrade && afplay /System/Library/Sounds/Submarine.aiff -v 10

then the afplay will run if the brew completes successfully. 
As a note of explanation, you are asking the shell to determine if both statements ("brew" and "afplay") are true - it is therefore obliged to evaluate the "brew" statement fully (i.e. wait for it to finish) before executing the "afplay" in order to determine whether both statements are true. 

A:

Thanks Mark.   You gave me a great idea. 
I haven't noticed &&, || can mean logical operators on shell also.   It appears '&& afplay ..' works only when 'brew upgrade' returns 0 which happens most of the time, and '|| afplay ..' works only when 'brew upgrade' returns 1 (or any non-zero) meaning error.  I decided to use semicolon ';' so afplay can play sound alarm whatever 'brew upgrade' reterns after job done. 
brew upgrade ; afplay /System/Library/Sounds/Submarine.aiff -v 10

EDIT: Now I use the following code in .profile (or .bashrc), which utilizes the advanced notifier tool, terminal-notifier. 
function brew { caffeinate -s brew $@; terminal-notifier -title 'Homebrew' -subtitle 'Finished' -message brew' '$1' '$2' '$3 -sound 'recv_mail' -contentImage '/Download/Any/Icon/beer_icon.png';}

Please note:

There must be a whitespace after the left brace '{' for bash syntax. 
caffeinate is used to prevent Mac from falling into sleep mode while brew works for a long time.  If you remove 'caffeinate -s', you should rename the function name also. 
You can install terminal-notifier with brew.  -contentImage is optoinal of course.