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 */
>