[comp.unix.questions] .login, .chsrc

macq@miguel.llnl.gov (Don MacQueen) (11/21/90)

In article <108878@convex.convex.com>, tchrist@convex.COM (Tom Christiansen) writes:
|> If your shell is the csh, then it will source your .cshrc
|> upon rsh's and rcp's.   Put this there at the top:
|> 	set path = ......
|> 	if ( ! $?prompt ) exit
|> Many people put their paths in their .login files. 
|> This is unfortunate.

(a few lines deleted)

What then are some general guidelines as to what goes in .cshrc and what goes in .login and why?  I've been wondering...

Thanks,
Don MacQueen
macq@miguel.llnl.gov

jmn@power.berkeley.edu (J. Mark Noworolski) (11/21/90)

macq@miguel.llnl.gov (Don MacQueen) writes:
>What then are some general guidelines as to what goes in .cshrc and what goes in .login and why?  I've been wondering...
I happened to be asking the same question a while back- here's the summary
of replies which I posted:

(Thanks again to everybody who helped out)

From: Mark Ferraretto <mferrare@physics.adelaide.edu.au>
Your .login should contain only things you want executed on login; eg setting
environment variables, displaying login messages etc.  Your .cshrc should
contain stuff you want in each shell; eg shell variables, aliases, prompts etc.

---------------------
From: bbx!yenta!dt@unmvax.cs.unm.edu (David B. Thomas)
The answer is very simple.  .login is executed when your login shell is
started, i.e. when you log in, and never again.  .cshrc is executed at
the beginning of any shell, including the login shell, and any subshells.

Therefore, something that prints a message if you have mail should probably
go in .login, whereas you favorite aliases should go in .cshrc, so you can
have them in your subshells, too.

                                        David

-----------------------
From: schaefer@cse.ogi.edu (Barton E. Schaefer)
It really isn't all that hard -- the names are quite descriptive.
Anything that should be done whenever a login shell is run, should go
in .login; anything that should be done whenever ANY shell is run, should
go in .cshrc.  That means that things like setting your terminal type,
establishing various environment settings, etc. should go in .login,
and almost everything else should go in .cshrc.

One caveat about .cshrc is that some things should be differentiated
based on whether the shell is interactive.  For example, you should never
set the variable $prompt in a non-interactive shell.  You can detect an
interactive shell by testing whether $prompt is already set:

    if ( $?prompt ) then
        # interactive stuff, including changing $prompt and most aliases
    endif
    # everything else.

Things like rsh and logging in through X windows fuzz the neat line that
used to be drawn between .login/.cshrc.  Csh was designed in the days
when there was only one "login session" -- connected to your single-
"window" tty terminal -- and all other shells were "subshells" that
didn't need to set up the environment once the login shell was in place.
It's usually a good idea to specify (to xterm for example) whether the
shell should be run as a login shell or not.  Think carefully about what
you're using each type of shell for, and you should be able to decide
what needs to go where.  If in doubt, put it in .cshrc but wrap it in
"if ( $?prompt )" to avoid confusing non-interactive uses.


--------------------
From: dce@smsc.Sony.COM (David Elliott)
The .cshrc file is run for any non-interactive csh started
without -f.  The .login file is read for all login csh sessions.

In general, the .login should contain settings of environment variables
(these get inherited by subprocesses), check your mail and news, set
up the tty (mesg, biff, stty), and set up the basic terminal session
(tset, terminal-specific environment).  If you have a special prompt
for your top-level shell, this is where you can set it.

The .cshrc should contain two parts: the interactive stuff and the
general stuff.  

The interactive stuff consists of setting the prompt (don't set it
otherwise unless you like to confuse editors and things), setting up
variables and aliases that are only important when you type them, and
setting other interactive modes (filename completion, history, cdpath,
etc.).  The general stuff consists of setting your path (you need this
for rsh) and variables and aliases that you might need from inside of
subshells (like when you use :! from vi).

Never put stty, biff, or mesg in your .cshrc.  That's not where it
belongs.  If you use X, make sure to start xterm with -ls so that
each window looks like a login shell.
--
"There's a really fine line between clever and stupid"
				Nigel- Lead Guitar (Spinal Tap)
jmn@united.berkeley.edu, or jmn@power.berkeley.edu