Fwd: Re: interactive shell detection in shrc

Steffen Nurpmeso <[email protected]>
Newsgroups gmane.os.netbsd.devel.userlevel
Message-ID <20240924204858.peSnp3jq@steffen%sdaoden.eu>
--- Forwarded from Steffen Nurpmeso <[email protected]> ---
Date: Tue, 24 Sep 2024 22:26:34 +0200
Author: Steffen Nurpmeso <[email protected]>
From: Steffen Nurpmeso <[email protected]>
To: Robert Elz <[email protected]>
Cc: Valery Ushakov <[email protected]>
Subject: Re: interactive shell detection in shrc
Message-ID: <20240924202634.-Z-0KGXP@steffen%sdaoden.eu>

Robert Elz wrote in
 <[email protected]>:
 |    Date:        Tue, 24 Sep 2024 00:56:40 +0200
 |    From:        Steffen Nurpmeso <[email protected]>
 |    Message-ID:  <20240923225640.BZkYDiMv@steffen%sdaoden.eu>
 |
 || and then (in ~/.shrc)
 ||
 ||   eval "___isinc=\$___SHRC$$"
 ||   if [ -z "${___isinc}" ]; then
 ||           eval "___SHRC${$}=YES"
 ||           export ___SHRC${$}
 ||           case ${-} in
 ||           *i*|*m*) # {{{
 ||   ...
 ||           esac
 ||   fi
 ||   unset ___isinc
 |
 |Random suggestions, preceded by a question?
 |
 |Why are you exporting ___SHRC$$ ?    As long as this shell
 |continues running, there cannot be another process with the
 |same $$ so the include guard cannot possibly have any effect
 |anywhere else, and this shell doesn't need the variable to
 |be exported to see it.   By the time $$ is the same value in
 |some other shell, you want the .shrc processed, don't you?

That is a too logical thinking for the above.  I needed an include
guard, and it came out like that.  What you say sounds right.

 |Given that it doesn't need exporting, it also doesn't need
 |the $$ in its name either, so

..yes?!..

 | if $___SHRC

Oh, i would be afraid of doing this implicit test.  I no longer
have many shells around, not even as source code, so i would not
dare to do this.

 | then
 |  ___SHRC=false
 |  case $- in
 |  *i*|*m*)
 |   # whatever
 |   ;;
 |  *)
 |   # whatever else
 |   ;;
 |  esac
 |  # common stuff for all cases
 | fi
 |
 |If you insist on quoting the expansion in the first line,
 |it needs to become:
 |
 | if "${___SHRC:-:}"

A syntax error of yours?

 |even if you want too keep the $$ and export for some reason
 |
 | if eval "\$___SHRC$$"
 | then
 |  eval "___SHRC$$=false"
 |  export "___SHRC$$"
 |  # etc
 | fi
 |
 |with the similar variation if you want the ___SHRC$$ expansion
 |quoted:
 | if eval "\"\${___SHRC$$:-:}\""
 |

You do it once again?

 |kre
 |
 |ps: writing $$ (or any of the special params) as ${$} (etc)
 |is really taking things a little far, unless you want a more

Yes, but i had a (pretty long, as in years) period of time when
i was doing this.  It slowly comes to an end again.  (Unless
necessity for separation arises.)

 |complex expansion, like ${!:-$$} or something.   It is even
 |weirder when you write $$ in one place and ${$} in others
 |(and use $- rather than ${-}).   And of course using $# rather

Ja, the period came to an end, and i was not changing it all at
once.  That is uncommon (for me), but the file is usually private
and never looked at.
I also seem to keep -- from the public files -- the syntax that
was used when it was written.  However, looking at it, sometimes
there is a wild mixture of style in even the latest public thing,
the test of a DKIM signer.  Well...

 |than ${#} makes it clear that you want the number of set
 |positional params, and not the length of something that you
 |forgot to insert...

Hmmmm.  Well, i do not often take lengths in the shell, and if
then mostly in a right-hand-side.  Ok, i have looked, and i see
zero such constructs in all my public repositories as well as in
the misc.git that collects some stuff, and not in config.git.
$# is either argc, or used for patterns.  But i guess the ${}
syntax will vanish over time.

You know, it is much easier with a German keyboard to not use *any
of* {}[], ie, programming on a German keyboard is asking for
arthritis, except for languages going for mostly $() -- i never
really thought about this but was "beetling" over it, so to say,
but then i had an english aka american keyboard for some years,
and it was pretty neat, and over that i came to that kind of
super-explicit shell syntax.  And once the habit was adopted,
switching back to German keyboard did not change it for some
years; especially since on this laptop the "g" key stopped working
after a few weeks, and ever since i have to use

  keycode  41 = f F g G g G

via my

  [ -f ~/.${HOSTNAME}.xmodmaprc ] && xmodmap ~/.${HOSTNAME}.xmodmaprc

as well as

  #@ /root/hosts/self/system-hook

  if [ "${1}" = start ]; then
     echo 'loadkeys: adjusting G key'
     # dumpkeys/loadkeys
     /usr/bin/loadkeys <<-_EOT
          altgr keycode 33 = g
          alt keycode 33 = g
          shift alt keycode 33 = G
          shift altgr keycode 33 = G
     _EOT
  fi

so that is a nice level of finger acrobatics anyway.  Well.
Cool laptop, i love it.  512GB NVME disk, unbelievable.

 --End of <[email protected]>

--steffen
|
|Der Kragenbaer,                The moon bear,
|der holt sich munter           he cheerfully and one by one
|einen nach dem anderen runter  wa.ks himself off
|(By Robert Gernhardt)

 -- End forward <20240924202634.-Z-0KGXP@steffen%sdaoden.eu>

--steffen
|
|Der Kragenbaer,                The moon bear,
|der holt sich munter           he cheerfully and one by one
|einen nach dem anderen runter  wa.ks himself off
|(By Robert Gernhardt)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.