3.19. Making a "Login" ShellWhen you log in to most Unix systems, your shell is a login shell. When a shell is a login shell, it acts differently (Section 3.4). Sometimes, when you're testing an account or using a window system, you want to start a login shell without logging in. Unix shells act like login shells when they are executed with a name that starts with a dash (-).[11] This is easy to do if you're using a system call in the exec(3) family. These system calls let a C-language programmer give both the filename of an executable file, like sh or /bin/sh, as well as the name that should be used to identify the process (in a ps (Section 24.5) listing, for example), like -sh.
If you're currently using zsh, you can invoke another shell this way by typing a dash and a space before the shell's name: zsh% - csh ...C shell starts, acting like a login shell... % C programmers can write a little program that runs the actual shell but tells the shell that its name starts with a dash. This is how the Unix login process does it: run_login_csh( ) { execl("/bin/csh", "-csh", 0); } A more general solution is to make a link (Section 10.4) to the shell and give the link a filename starting with a dash. If your own bin subdirectory is on the same filesystem as /bin (or wherever the executable shell file is), you can use a hard link. Otherwise, make a symbolic link, as shown here: bin Section 7.4, ./- Section 14.13 $ cd $HOME/bin $ ln -s /bin/csh ./-csh Then you can execute your new shell by typing its name: $ -csh ...normal C shell login process... % ...run whatever commands you want... % logout $ ...back to original shell --JP and SJC Copyright © 2003 O'Reilly & Associates. All rights reserved. |
|