Table of Contents

BASH - Check if bash is running in interactive mode

if [[ $- == *i* ]]
then
  do_interactive_stuff
fi
 
 
if [ "$-#*i" == "$-" ]; then
  ...
fi

NOTE: According to man bash:

  • PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.

Check if standard input is a TTY

if [ -t 0 ] ; then
  echo stdin is a terminal
  .....
fi

or

if [ -t 1 ] ; then
  echo stdout is a terminal
fi

NOTE: -t FD is True if FD is opened on a terminal.

Portable between shells.


Examples

bash <<< 'test -t 0 && echo Y || echo X

writes X

bash -c 'test -t 0 && echo Y || echo X

writes Y

NOTE: This also verifies that the standard input is a TTY; although it can be related but it is NOT the same as the shell's interactive mode, which is requested and indicated by shell's ā€œ-iā€ flag.