On Wed, Jan 26, 2022 at 10:59:28PM -0600, David Wright wrote: > On Mon 12 Apr 2021 at 11:26:49 (-0400), Greg Wooledge wrote: > > On Mon, Apr 12, 2021 at 10:18:19AM -0500, David Wright wrote: > > > I'm not using PS1 to test whether stdout is a terminal, but whether > > > the file is running interactively. From man bash: > > > > > > "PS1 is set and $- includes i if bash is interactive, allowing a > > > shell script or a startup file to test this state. > > > > The second half of that sentence is referring to the $- part. That's > > what you're supposed to test to see whether the shell is interactive. > > > > # bash > > if [[ $- = *i* ]]; then > > echo "I am an interactive shell" > > echo > > > > # sh > > case $- in > > *i*) echo "I am an interactive shell" ;; > > esac > > I happened to come across one place where I might have originally > found the construction I no longer use, and that's in man lesspipe, > very near the end, where it says: > > if [ -z "$PS1" ]; then
Well, that's not a reliable test. You could have PS1 set via the environment in a non-interactive shell. The number of people who export PS1 from their profiles or bashrc files is non-negligible.