Re: PS1 and $-, a footnote; was Re: .profile not being src'd at login on uptodate buster

2022-01-27 Thread Greg Wooledge
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.



PS1 and $-, a footnote; was Re: .profile not being src'd at login on uptodate buster

2022-01-26 Thread David Wright
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

Cheers,
David.