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 c...@case.edu 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);