Terminal Notifier is a command-line tool to send macOS notifications, which are available since Mac OS X 10.8 and newer, using the shell. Useful when something happens in a long running script you wrote.

For example, you could get a notification every time rkhunter does a check which opens the corresponding log file. Or use it when you write a cronjob for something. The possibilities are endless. Everything you need to install this is Homebrew and the following command:

brew install terminal-notifier

Usage

terminal-notifier -[message|list|remove] [VALUE|ID|ID] [options]

Either of these is required (unless message data is piped to the tool):

-help              Display this help banner.
-message VALUE     The notification message.
-remove ID         Removes a notification with the specified ‘group’ ID.
-list ID           If the specified ‘group’ ID exists show when it was delivered,
or use ‘ALL’ as ID to see all notifications.
The output is a tab-separated list.

Optional:

-title VALUE       The notification title. Defaults to ‘Terminal’.
-subtitle VALUE    The notification subtitle.
-sound NAME        The name of a sound to play when the notification appears. The names are listed
in Sound Preferences. Use 'default' for the default notification sound.
-group ID          A string which identifies the group the notifications belong to.
Old notifications with the same ID will be removed.
-activate ID       The bundle identifier of the application to activate when the user clicks the notification.
-sender ID         The bundle identifier of the application that should be shown as the sender, including its icon.
-appIcon URL       The URL of a image to display instead of the application icon (Mavericks+ only)
-contentImage URL  The URL of a image to display attached to the notification (Mavericks+ only)
-open URL          The URL of a resource to open when the user clicks the notification.
-execute COMMAND   A shell command to perform when the user clicks the notification.

When the user activates a notification, the results are logged to the system logs.
Use Console.app to view these logs.

Note that in some circumstances the first character of a message has to be
escaped in order to be recognized.
An example of this is when using an open bracket, which has to be escaped like
so:
'\['