KornShell history numbers
Bryan Higgins
bryan at well.sf.ca.us
Wed Jun 26 12:48:18 AEST 1991
I wrote:
>Does anyone know how the history numbers are handled from login to login?
>That is, if the current command number is, say, 427, and one logs out and logs
>back in, the new current command number might be something like 203, with all
>the previous commands renumbered accordingly. I've experimented with this a
>little bit, and can't see any logic in the renumbering.
>Actually, I'd like all the old commands renumbered starting at 1 every time I
>log in. Is there a way to achieve this?
Some of you wrote and suggested I delete the history file at login, but
notice I said renumber =old= commands starting at 1, not throw away the his-
tory completely. In other words, if my HISTSIZE is 64, I want to be at com-
mand 65 when I log in. Turns out the shell keeps more than HISTSIZE com-
amnds in the file (though it doesn't let you get at them), so the history
number is big. How much it deletes from the file when one logs in (it =is=
trimming it time) seems haphazard.
I've solved this with the following:
#include <stdio.h>
#include <ctype.h>
main()
{
int n;
char line[1024];
char *p;
fwrite("\201\001", 1, 2, stdout);
while (fgets(line, sizeof(line) - 2, stdin)) {
for (p = line; isspace(*p); ++p) {
;
}
n = strlen(p);
if (n++ & 1) {
p[n++] = '\0';
}
fwrite(p, 1, n, stdout);
}
}
If the executable is called 'newhist', then
fc -l -63 -1 | newhist > tmp
mv tmp $HISTFILE
at the start of .profile will do the job.
More information about the Comp.unix.shell
mailing list