Below is why I was thinking $SHELL, especially since $FAKE_SHELL can be used to override the /etc/passwd entry. Of course a desktop environment or whatever might launch a terminal window without having gone through login, although I imagine some logic in the display manger should replicate login's job. I suppose there really should be a standard library procedure for invoking the appropriate user shell, or at least for finding it...
$ man 5 passwd | egrep -1 SHELL The command interpreter field provides the name of the user's command language interpreter, or the name of the initial program to execute. The login program uses this information to set the value of the $SHELL environmental variable. If this field is empty, it defaults to the value /bin/sh. $ man login | egrep -A1 SHELL Your user and group ID will be set according to their values in the /etc/passwd file. The value for $HOME, $SHELL, $PATH, $LOGNAME, and $MAIL are set according to the appropriate fields in the password entry. Ulimit, umask and nice values may also be set according to -- FAKE_SHELL (string) If set, login will execute this shell instead of the users' shell specified in /etc/passwd.