To set your prompt, you execute a command (on most shells, the command sets a shell variable). Before setting the prompt, you may run other commands to get information for it: the current directory name, for example. A shell can run two kinds of commands: built-in and external ( 1.10 ) . Built-in commands usually run faster than external commands. On a slow computer, the difference may be important - waiting a few seconds for your prompt to reset can get irritating. Creative use of your shell's built-in commands might pay off there. Let's look at some examples:
pwd
is an external command that
searches the filesystem (
14.4
)
to find your current directory name. (
pwd
is built into some shells, but that version doesn't search the filesystem.) However, some shells can give you the current directory name from a variable, usually
$cwd
or
$PWD
. On slow computers, the first prompt-setting command below would take more time:
`...` |
set prompt="`pwd`% " set prompt="${cwd}% " |
---|
There's a tradeoff here, though - the shell built-in
may not (
14.13
)
give the right answer. Also, in the C shell, each time you change to a new directory, you need to run a new
set prompt
command; you can use an alias like
setprompt (
7.5
)
to do this automatically.
If you're putting your current directory in your prompt, you may only want the tail of the pathname (the name past the last slash). How can you edit a pathname? Most people think of
basename
(
45.18
)
or
sed
(
34.24
)
. Using the current directory from
$cwd
, they might type:
set prompt="`basename $cwd`% "
The faster way is with the C shell's built-in "tail" operator,
:t
:
{} |
set prompt="${cwd:t}% " |
---|
If your current directory is /usr/users/hanna/projects , either of those prompts would look like this (with a space after the percent sign):
projects%
The C shell has several of these built-in
string operators (
9.6
)
like
:t
; the Korn Shell and
bash
have more-powerful
string operators (
9.7
)
.
The Korn shell and
bash
can include the current value of another shell variable in their prompt. So, put
$PWD
(
6.3
)
in your prompt string (the
PS1
shell variable) and the prompt will always show the current directory. Or use any other variable; anytime it changes, the prompt will change too. The important trick is to store the prompt with
single quotes (
'
), not double quotes (
"
), so that the variable name in your prompt won't be
evaluated (
8.14
,
8.5
)
until the prompt is actually printed to the screen.
For example, I'll put the current directory and the value of a variable named PSX in my prompt. When I change either, the prompt changes too:
$PSX=foo
$PS1='$PWD $PSX\$ '
/home/jerry foo$PSX=bar
/home/jerry bar$cd ..
/home bar$
tcsh and bash also have special prompt string customizations that let you include the hostname, username, time, and more. You don't need external UNIX commands; you don't need to use an alias like setprompt to reset your prompt string.
For example, to make your shell prompt show your current directory, a newline character (to move to the next line of a
two-line prompt (
7.5
)
), then the current time, and finally a
$
or
%
:
PS1='$PWD\n\t \$ ' ...bash set prompt = '%~\\ ...tcsh %p%% '
For more information, see O'Reilly & Associates' Using csh & tcsh and Learning the bash Shell -or your shell's manpage.
So, if your prompt takes too long to set, look for built-ins that can save time. As another example, article 7.11 shows how to use dirs in a shell prompt.
-