Make the shell a friendly place to work in.
Now that you've had a chance to make friends with the shell, let's use its configuration file to create an environment you'll enjoy working in. Your prompt is an excellent place to start.
1.3.1 Making Your Prompt More Useful
The default tcsh prompt displays % when you're logged in as a regular user and hostname# when you're logged in as the superuser. That's a fairly useful way to figure out who you're logged in as, but we can do much better than that.
Each user on the system, including the superuser, has a .cshrc file in his home directory. Here are my current prompt settings:
dru@~:grep prompt ~/.cshrc if ($?prompt) then set prompt = "%B%n@%~%b: "
That isn't the default tcsh prompt, as I've been using my favorite customized prompt for the past few years. The possible prompt formatting sequences are easy to understand if you have a list of possibilities in front of you. That list is buried deeply within man cshrc, so here's a quick way to zero in on it:
dru@~:man cshrc /prompt may include
Here I've used the / to invoke the manpage search utility. The search string prompt may include brings you to the right section, and is intuitive enough that even my rusty old brain can remember it.
If you compare the formatting sequences shown in the manpage to my prompt string, it reads as follows:
set prompt = "%B%n@%~%b: "
That's a little dense. Table 1-1 dissects the options.
With this prompt, I always know who I am and where I am. If I also needed to know what machine I was logged into (useful for remote administration), I could also include %M or %m somewhere within the prompt string.
I highly recommend you take some time to experiment with the various formatting sequences and hack a prompt that best meets your needs. You can add other features, including customized time and date strings and command history numbers [Hack #1], as well as flashing or underlining the prompt.
1.3.2 Setting Shell Variables
Your prompt is an example of a shell variable. There are dozens of other shell variables you can set in .cshrc. My trick for finding the shell variables section in the manpage is:
dru@~:man cshrc /variables described
As the name implies, shell variables affect only the commands that are built into the shell itself. Don't confuse these with environment variables, which affect your entire working environment and every command you invoke.
If you take a look at your ~/.cshrc file, environment variables are the ones written in uppercase and are preceded with the setenv command. Shell variables are written in lowercase and are preceded with the set command.
You can also enable a shell variable by using the set command at your command prompt. (Use unset to disable it.) Since the variable affects only your current login session and its children, you can experiment with setting and unsetting variables to your heart's content. If you get into trouble, log out of that session and log in again.
If you find a variable you want to keep permanently, add it to your ~/.cshrc file in the section that contains the default set commands. Let's take a look at some of the most useful ones.
If you enjoyed Ctrl-d from [Hack #1], you'll like this even better:
Now whenever you use the Tab key and the shell isn't sure what you want, it won't beep at you. Instead, the shell will show you the applicable possibilities. You don't even have to press Ctrl-d first!
The next variable might save you from possible future peril:
I'll test this variable by quickly making a test directory and some files:
dru@~:mkdir test dru@~:cd test dru@~/test:touch a b c d e
Then, I'll try to remove the files from that test directory:
dru@~/test:rm * Do you really want to delete all files? [n/y]
Since my prompt tells me what directory I'm in, this trick gives me one last chance to double-check that I really am deleting the files I want to delete.
If you're prone to typos, consider this one:
This is how the shell will respond to typos at the command line:
dru@~:cd /urs/ports CORRECT>cd /usr/ports (y|n|e|a)?
Pressing y will correct the spelling and execute the command. Pressing n will execute the misspelled command, resulting in an error message. If I press e, I can edit my command (although, in this case, it would be much quicker for the shell to go with its correct spelling). And if I completely panic at the thought of all of these choices, I can always press a to abort and just get my prompt back.
If you like to save keystrokes, try:
You'll never have to type cd again. Instead, simply type the name of the directory and the shell will assume you want to go there.