|
Chapter 7 Setting Your Shell Prompt
|
|
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.
|
|