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.