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

bashterminal

I have a script that I want to have a different behaviour depending on whether it was launched from the terminal or by (double) clicking the icon in the file manager. Can I do this?

Best Answer

  • 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
    
  • Related Question