tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: interactive shell detection in shrc



On Fri, Oct 4, 2024 at 1:43 PM Greg A. Woods <woods%planix.ca@localhost> wrote:

> At Mon, 30 Sep 2024 22:52:18 +0200, tlaronde%kergis.com@localhost wrote:
> Subject: Re: interactive shell detection in shrc
> >
> > But, if I'm not mistaken, the discussion was about testing if a shell
> > is interactive, that is, "inheriting" whatever has been set and
> > testing it.
>
> This thread started to discuss detecting an interactive shell in the
> likes of ~/.shrc, i.e. in the script file referenced by the expansion of
> $ENV, specifically for NetBSD sh(1).
>
> This is of particular importance for NetBSD's sh(1) (and also NetBSD
> ksh(1)) because it(they) always source the expansion of $ENV even for
> non-interactive shells.
>

okay. I'm glad you're getting in the weeds because I depend on the
OS to present the right thing.

to simplify my world, I set all site env in skel/.profile before adding
users.
which includes purging everything from sh-like rc files
except ". $HOME/.profile" and a comment explaining
to use that file for user configs, to prevent rc sprawl.
I am also careful about exporting functions and variables.
this keeps $SHELL conditionals together in one file, too.

As for interactive shortcuts, I have several carefully chosen ones,
the ones here are very handy, I use them all the time....

  alias    g='grep'    # grep the regex
  alias    v='grep -v' # grep -v the regex
  alias    h='fc -l'   # list commands previously entered in shell.
  alias    j='jobs -l' # list background jobs
  alias    s='less -R' # less
  b() { cd "$OLDPWD" ;} # previous directory
  f() { local n="${1##*/}" ; shift || true
      ( set -x ; find -E . -iname "*${n}*" ${@} ) ;}

that last one will return all the yml files below the current directory with
f yml
or files with mod times today with
f . -type f -mtime -1
more complicated variations are in my env, the set -x enables
easy adjustment of longer find invocations, with copy/paste.


> Also because of a long-standing "oversight" in NetBSD sh(1) some shells
> we might ignore the stderr part of the test and just consider stdin (as
> that's really all that matters for "interactivity", right?).
>

Thanks for pointing that out.
I didn't say that, but I did notice it earlier today,
and it is an important security concern. eg a multiphase
attack could start with redirecting stderr to /dev/null
and users would assume no error in their shell,
when there was.

I've already switched to
test -t 0 && test -t 2 || return 0
but in bash I use
export PS1="\${?%0} \u@\h:\w "
which is very handy to always know err state.

-George

-- 
George Georgalis, (415) 894-2710, http://www.galis.org/


Home | Main Index | Thread Index | Old Index