/* Return the string value of a variable. Return NULL if the variable
doesn't exist, or only has a function as a value. Don't cons a new
string. */
char *
get_string_value (var_name)
char *var_name;
{
SHELL_VAR *var = find_variable (var_name);
if (!var)
return (char *)NULL;
else
return (var->value);
}
打印提示符是如何实现的?
/* Issue a prompt, or prepare to issue a prompt when the next character
is read. */
prompt_again ()
{
char *decode_prompt_string ();
char *temp_prompt;
ps1_prompt = get_string_value ("PS1");
ps2_prompt = get_string_value ("PS2");
if (!prompt_string_pointer)
prompt_string_pointer = &ps1_prompt;
if (*prompt_string_pointer)
temp_prompt = decode_prompt_string (*prompt_string_pointer);
else
temp_prompt = savestring ("");
#ifdef READLINE
if (!no_line_editing)
{
if (current_readline_prompt)
free (current_readline_prompt);
current_readline_prompt = temp_prompt;
}
else
#endif /* READLINE */
{
if (interactive)
{
fprintf (stderr, "%s", temp_prompt);
fflush (stderr);
}
free (temp_prompt);
}
}