Subject: Re: aliases in kde
To: Hume Smith <>
From: Rob Windsor <>
List: netbsd-users
Date: 03/06/2000 11:14:42
Verily did Hume Smith write:

> >> Where do you define your aliases?
> >> ~/.cshrc or ~/.login or ~/.xsession (don't know if that works)?

> I'll just chuck in my random comments here.  Folx, please jump on any
> serious misconceptions i put in.  Forgive me if the asker already knows it
> well :)

Well, I'll add opinionated stuff, for sure...

> .login is "startup" stuff for, how should I call them, "dumb terminal
> sessions"?  The things you get from login, via a serial terminal, the
> console, telnet, rlogin, etc.

.login files are largely useless.  They're really only good for checking to 
see if you have $TERM set and if not, to query you for it.  I don't even 
bother with that, most .login files of the accounts at work have one line; a 
comment stating to put stuff in the .cshrc instead.

> .xession is startup stuff for X sessions.  It's thus analogous to .login,
> except by the nature of X it tends to start a lot of programs.  One big
> difference is that your session terminates when .xsession completes (.login
> just falls off the end and goes to a prompt), so the last thing run by
> .xsession has to hang around for awhile. =20

What I like to do with my .xsession is:

    : nimh; cat .xsession
    . ${HOME}/.xinitrc

I've found on various systems that your .xsession is generally a superset of 
what you run in your .xinitrc, so this is better than a symlink.

Putting shell things like aliases in your .xsession isn't a good way of doing 
it.  You should only toss X-specific things in here.

> .login and .xsession are only run once per session, in your "topmost" shell.
>  Thus they should be used for the per-session things, like background tasks
> and environment variables.

Well, `session' can be confusing.  Firing up an xterm may be a `session' to 
one guy but not to another (and in your example, it isn't).  Another reason 
why .login files are somewhat useless.  :>

> .cshrc is run by every invocation of csh and tcsh (usually - seems to me
> there's a switch to tell the (t)csh not to).  It should thus be used to
> initialise things *internal* to (t)csh, ie which are not inherited from the
> caller... that's *shell* variables (made by set instead of setenv in (t)csh)
> and aliases.

The switch to tell (t)csh not to is "-f", e.g. in a script:

    #!/bin/csh -f
    setenv PATH /bin:/usr/bin:/foo
    do something

Your .cshrc file is where you need to do just about everything.  Now that I've 
said that, I'll add an au-contraire -- put your aliases in ~/.aliases and add 
the following in your .cshrc:

    if ( -f ~/.aliases ) then
        source ~/.aliases

This will clean up your .cshrc a *lot*

I also prefer to see people use
    "setenv PATH /foo:/bar:/baz"
instead of
    "set path = (/foo /bar /baz)"
but I that's just a personal preference.

Also, one last tidbit about your .cshrc -- you generally want a distinction in 
your .cshrc file between interactive shells and non-interactive shells.  The 
latter is when you "ssh machine /usr/local/bin/some_command".  There may be 
some settings that you don't want/need for non-interactive shells, such as 
"set history=30" (sets the shell history length -- see manpage for details).

For such items, you add to your .cshrc:

    if ($?prompt == 0) exit
    # Everything below this line is for interactive shells only.

Not that I actually use csh for anything, but here's my simple, complete 

        # -*-text-*- because emacs likes it this way!
        setenv PATH /bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbi
        setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

        setenv TMPDIR /tmp

        if ( -f ~/.aliases ) then
            source ~/.aliases

        if ($?prompt == 0) exit
        # Everything below this line is for interactive shells only.

        set history=20
        set ignoreeof=5


-- Rob
Internet:                             __o
Life: Rob@Carrollton.Texas.USA.Earth                    _`\<,_
                                                       (_)/ (_)
The weather is here, wish you were beautiful.