On 3/30/10 2:36 AM, Clark J. Wang wrote:
> Good news:
>
> I met this problem again a few minutes ago. Then I looked back to find out
> what I was doing. After some investigation I could stably reproduce this
> problem by following steps (tested with bash 3.1.17, 3.2.39 and 4.1.0):
>
> bash$ alias xx='echo 142857' ### Make sure there isn't an external cmd
> named `xx'
> bash$ export EDITOR=vi
> bash$ set -o vi
> bash$ ### Press ESC to get out of vi's INSERT mode
> bash$ ### Press v to invoke vi to input a cmd like `ls', save and exit,
> the `ls' cmd runs.
> bash$ xx
> -bash: xx: command not found
> bash$ xx
> 142857
> bash$
Thanks for the report. This was exactly what I needed. The fix will be
in the next release of bash. I've attached a patch for the curious or
impatient.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU [email protected] http://cnswww.cns.cwru.edu/~chet/
*** ../bash-4.1-patched/bashline.c 2010-03-26 12:15:37.000000000 -0400
--- bashline.c 2010-03-30 23:25:22.000000000 -0400
***************
*** 864,867 ****
--- 864,868 ----
char *command, *metaval;
int r, cclc, rrs, metaflag;
+ sh_parser_state_t ps;
rrs = rl_readline_state;
***************
*** 898,902 ****
--- 899,905 ----
if (rl_deprep_term_function)
(*rl_deprep_term_function) ();
+ save_parser_state (&ps);
r = parse_and_execute (command, (editing_mode == VI_EDITING_MODE) ? "v" :
"C-xC-e", SEVAL_NOHIST);
+ restore_parser_state (&ps);
if (rl_prep_term_function)
(*rl_prep_term_function) (metaflag);