On Wed, Aug 13, 2014 at 07:41:08PM +0100, Jason McIntyre wrote: > hi! > > notice how ksh's history command (fc -l) does not list the last typed history > command: > > $ ls > $ date > Wed Aug 13 19:29:59 BST 2014 > $ history > 1 ls > 2 date > > the only thing i have to compare it with is bash: > > bash-4.3$ ls > bash-4.3$ date > Wed Aug 13 19:31:47 BST 2014 > bash-4.3$ history > 1 ls > 2 date > 3 history
zsh has the same behaviour as ksh: remi@mistral:~% ls -d . . remi@mistral:~% date Wed Aug 13 21:32:51 CEST 2014 remi@mistral:~% history 1 rm .zhistfile 2 ls -d . 3 date remi@mistral:~% > > i think ksh's behaviour is wrong, but i'm unable to find anything that says > how it > should behave. note that commands like (in vi editing mode) "2k" in the > example above > will bring up "date", which is correct but confusing in ksh's case (since > looking at > the output of "history" you'd expect "ls"). > > anyone? > > note i have "a fix", included below, but it was produced using the theory > about > an infinite number of monkeys with an infinite amount of time. i definitely > do not profer > it in seriousness. > > jmc > > Index: history.c > =================================================================== > RCS file: /cvs/src/bin/ksh/history.c,v > retrieving revision 1.39 > diff -u -r1.39 history.c > --- history.c 19 May 2010 17:36:08 -0000 1.39 > +++ history.c 13 Aug 2014 18:38:16 -0000 > @@ -190,7 +190,7 @@ > const char *nfmt = nflag ? "\t" : "%d\t"; > > for (hp = rflag ? hlast : hfirst; > - hp >= hfirst && hp <= hlast; hp += rflag ? -1 : 1) { > + hp >= hfirst && hp <= hlast + 1; hp += rflag ? -1 : 1) { > shf_fprintf(shl_stdout, nfmt, > hist_source->line - (int) (histptr - hp)); > /* print multi-line commands correctly */ >