Wandering Thoughts archives


Using a non-standard shell as your login shell

Suppose that you want to use a non-standard shell as your login shell (for the purposes of this, 'non-standard' means that it's not installed system-wide; you have to compile your own version). Further suppose, for the sake of argument, that the shell you want to use doesn't have a command-line option to tell it to be a login shell.

If your shell did have such a command line option, using it as your login shell would be simple. Set your system shell to /bin/sh and then have a .profile that just said something like:

SHELL=$HOME/bin/shell; export SHELL
exec $SHELL --login

(This doesn't work on some systems in some circumstances, but that's another entry entirely.)

Without such an option, you need some way to make your non-standard shell think that it is being run as a login shell by login (and things that imitate it, like your SSH daemon). As you might guess, there is a long-standing convention for how login communicates this to the shell: a login shell has a '-' as the first character of its program name.

(This works because the entire argument list, including the program name (aka 'argument zero'), is entirely up to the program that runs you; it need not have anything to do with your actual file name.)

This really means the first character, which means that you need some way to make the first character be a '-'. As it happens, most or all shells just use the bare program name if you run something that is found in your $PATH. So what you need is two-fold: first, you need a version of your shell that's called '-shell' (easily gotten with a symlink or a hardlink), and second, you need to add $HOME/bin to your $PATH so you can run your shell without an absolute or relative path.

This gives you the magic incantation:

exec -shell

(Then you run into a bash irritation.)

unix/UsingAlternateShell written at 00:33:32; Add Comment

Page tools: See As Normal.
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.