tech-userlevel archive

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

Re: interactive shell detection in shrc



    Date:        Tue, 24 Sep 2024 00:56:40 +0200
    From:        Steffen Nurpmeso <steffen%sdaoden.eu@localhost>
    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?

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

	if $___SHRC
	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:-:}"

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$$:-:}\""

kre

ps: writing $$ (or any of the special params) as ${$} (etc)
is really taking things a little far, unless you want a more
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
than ${#} makes it clear that you want the number of set
positional params, and not the length of something that you
forgot to insert...


Home | Main Index | Thread Index | Old Index