Determine whether a bash script was launched by icon click or from terminal

You can use differences in the return status from tty to help you.

if tty -s;
then
    # running in a terminal
    ...
fi

(tty -s runs the tty command silently)

Exit status:

  • 0 if standard input is a terminal
  • 1 if standard input is not a terminal
  • 2 if given incorrect arguments
  • 3 if a write error occurs

Or you could use the shell's built-in tests to check whether standard input/output are from/to a terminal:

if [ -t 0 ];  # stdin
then
    # running in a terminal
    ...
fi