fivemack: (Default)
Tom Womack ([personal profile] fivemack) wrote2006-09-11 04:41 pm
Entry tags:

post-diluvian shells

Is there any shell which maintains an at-all-sensible command history when you're working with several terminals each with half a dozen sessions in tabs? Intercalating the history from multiple sessions would probably be ideal for my current working style; appending the history from each session as a lump when the session closes would also be fine; but at the moment tcsh seems to maintain history for at most one session, randomly-selected, and this makes 'history' less than useful if I actually want to work out what I've been doing.

[identity profile] senji.livejournal.com 2006-09-11 03:52 pm (UTC)(link)
The galeïan in me is shouting "zsh" at this point.

I don't actually use it myself though.
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2006-09-11 03:52 pm (UTC)(link)
I believe Bash appends its history as a lump when you close it.
(deleted comment) (Show 1 comment)

zsh

[identity profile] http://the.earth.li/~alex/halley/ (from livejournal.com) 2006-09-11 05:17 pm (UTC)(link)
zshzshzshzshzsh

APPEND_HISTORY or
INC_APPEND_HISTORY or even
SHARED_HISTORY

are friendly type options.

[identity profile] arnhem.livejournal.com 2006-09-11 10:10 pm (UTC)(link)
I wouldn't dream of doing anything that sounded remotely like recommending that someone start or continue working with the csh or its derivatives, but have you noticed the bit of the manual that asserts that the "savehist" shell variable can contain two words - the first, if set to a number, says how many lines should be saved in the history file; the second, if set to "merge" causes the history list to be merged with the existing history file instead of replacing it, and sorted by time stamp.

It does note, depressingly, that this only works "when the shells quit nicely one after another", so I suspect that the quite common behaviour of killing an X session resulting in a whole bunch of shells quitting almost simultaneously will just result in corrupted history files ...

Worth trying
set savehist="10000 merge"

as a quick fix, allowing for the fact that there are known failure modes?
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2006-09-12 09:04 am (UTC)(link)

You wouldn't have thought it was that hard to write a little history management library that did the right thing. Might be trickier persuading shell maintainers to integrate it...

I think you'd need the following operations:

  • Use the following history file
  • Give me the N most recent history items as an array of strings
  • Add these lines to the history
  • Get/set the maximum history size
  • Err ... that's it?

Any number of processes can use any of the operations in any order and it's still safe. It'd have to be safe over NFS too, which might be more entertaining.

There'd also be little command, again using this interface, to separately set the history size, for integration with applications that lacked a convenient way to configure it.