[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: PATCH: Add \? to get PIPESTATUS information in the prompt
From: |
Chet Ramey |
Subject: |
Re: PATCH: Add \? to get PIPESTATUS information in the prompt |
Date: |
Thu, 6 Sep 2001 11:31:14 -0400 |
> I wrote:
> > "Wesley J Landaker" <wjl@mindless.com> wrote:
> >> This is possible to do, sure, with PROMPT_COMMAND and so forth, but
> >> it's rather annoying, because running PROMPT_COMMAND actually modifies
> >> PIPESTATUS, and so forth.
> >
> > You can save $? befare doing anything else, and restore it at the end.
>
> Actually, PIPESTATUS is modified by PROMPT_COMMAND, but not by command
> substitution in PS1 (in 2.04, anyway). $? is modified by both.
> Weird. Chet, is this something we should rely on, or might it be
> changed?
If you look at parse.y:execute_prompt_command(), it takes pains to
preserve $? around the command's execution. A trivial test:
PROMPT_COMMAND=false
true
echo $?
echos `0' for me, but I have no command substitutions in my prompt.
Command substitution is supposed to affect $?, according to POSIX.2,
if, after the various word expansions, no command is executed. I
think it's wrong to have command substitutions in the prompt strings
affect $?, though, so I'm going to change parse.y:decode_prompt_string()
to save and restore $? around the word expansions.
As for PIPESTATUS, I will change things so that it won't change as
the result of executing $PROMPT_COMMAND.
The end result should be that neither $PROMPT_COMMAND nor prompt string
expansion change $? or $PIPESTATUS.
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
( ``Discere est Dolere'' -- chet)
Chet Ramey, CWRU chet@po.CWRU.Edu http://cnswww.cns.cwru.edu/~chet/