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.
>

Reply via email to