Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!wuarchive!cs.utexas.edu!sun-barr!apple!afsg!ron From: ron@afsg.apple.com (Ron Flax) Newsgroups: comp.unix.aux Subject: Re: tcsh problem on 2.0.1 Keywords: tcsh, AUX 2.0.1 Message-ID: <567@afsg.apple.com> Date: 6 May 91 17:47:01 GMT References: <989@lychee.cs.utexas.edu> Organization: Apple Federal Systems Group Lines: 62 In article <989@lychee.cs.utexas.edu> ckwang@cs.utexas.edu (Chih-kan Wang) writes: >I downloaded the compiled tcsh from aux.support.apple.com, put it in /bin, >edited the /etc/shells, set proper access mode (as the root), and chsh to >tcsh (in an ordinary user account). Then when I login again and opened >commandshells, my .login file in home directory didn't get executed. But >if I changed back to csh, everything went back to normal. Does anybody >have any similar experience? > >The configuration is: > tcsh 5.18 compiled for AUX 2.0 Well for starters you should probably grab version 5.20.02 from afsg.apple.com at 192.1.34.2. Here's what is going on.. tcsh determines that it is a "login shell" by looking at it's own argc and argv upon execution. if (argc==1 && *argv[0] == '-') tcsh is a login shell; else tcsh is NOT a login shell; If tcsh thinks it's a login shell, it processes /etc/csh.login, .tcshrc, .login, .cshrc, .logout, and /etc/Logout. If it's not a login shell then it only processes .tcshrc and .cshrc. That said, here's what is happening... /mac/bin/Login calls tcsh as follows to start your mac environment: -tcsh -c /mac/bin/mac32 You can see it sets up *argv[0] ok, but argc=3, not 1. So it's not considered a login shell and therefore doesn't process the apropriate dot files. Now let's say you login to the Console Emulator screen instead of a 32-bit Macintosh environment. Here's what /mac/bin/Login does: -tcsh Now both requirements are satisfied, and tcsh thinks it's a login shell. To fix things so that tcsh will process your .login file you can trick the shell by creating a .tcshrc file and placing a line that reads: source ~/.login in that file. This will force tcsh to process your .login file. You can even get a little more specific and only have that occur if the tcsh process is connected to the console. For instance you could do the following: if ( `/bin/tty` == /dev/console ) source ~/.login Hope this helps you to understand how tcsh is handling startup files. -- Ron Flax ron@afsg.apple.com Apple Federal Systems Group