On Fri, Mar 27, 2015 at 11:36 AM, Christoph Anton Mitterer < cales...@scientia.net> wrote:
> Hey. > > There are a lot of articles on the web about detecting the actually > running shell. > Unfortunately, just relying on $SHELL doesn't really work since when I > invoke e.g. csh from bash, it would be still $SHELL=bash and I guess I > won't be able to convince all shell upstreams to overwrite $SHELL (which > IMHO would be much better, and more like $TERM). > > Now I see basically two other ways to detect a shell: > a) using ps or something similar... which is not really portable either > and can be rather easily/accidentally fooled > > b) Using some env vars typically to the shell, e.g. BASH_VERSION for > bash. > AFAIU per default these are not declared'ed -x , so when I rund fooShell > from bash it wouldn't be inherited. > But the user could still manually mark it exportable. > > c) I've also thought about somehow using e.g. shopt, when it runs I > could be sure, it was bash. But for that in turn I'd need to make sure > whether it's a built-in command, which works in bash with the "builtin" > built in command ;) ... but not portably as in POSIX shell command > language (at least not that I'd know). > > > Is there some better way to do this (at least to detect bash)? E.g. some > VAR that bash sets and that it would neither take from its own > environment when being started nor that it would pass on to processes? > For bash I think you can just check $BASH_VERSION. Also see Sven Mascheck's whatshell: http://www.in-ulm.de/~mascheck/various/whatshell/ . -clark > > Thanks, > Chris. >