Does either of those keep the command histories for multiple login 
sessions stored in separate files?  My guess is "no," but that it still 
would help when a connection is lost.  I have been wanting for years to 
learn to use GNU Screen but I haven't gotten around to it.  Is there a 
good tutorial?

If I weren't doing what I am doing, and the server crashed, I would lose 
all command histories.  This way I lose nothing.  I don't think screen 
would help unless it is continually storing its state and command history 
in a file.

Mike


On Sun, 5 Jan 2014, Gavin Purcell wrote:

> Maybe tmux or screen could be of use.
>
>
> On Sun, Jan 5, 2014 at 8:50 PM, Mike Miller <mbmiller+l at gmail.com> wrote:
>
>> On Sun, 5 Jan 2014, Erik Anderson wrote:
>>
>>  I'm curious to hear about *why* you are separating your HISTFILEs,
>>> though. My guess is that you have a set of different ssh session "types",
>>> and you want to be able to isolate history entries for each function. Is
>>> that correct?
>>>
>>
>>
>> I'll have maybe 10 connections open to the server at once and each of them
>> will be for my work on some project.  So every connection is of its own
>> type -- there is no sort of classification scheme, if that's what you were
>> asking.
>>
>> Every time the command prompt returns, it writes the previous command to
>> the HISTFILE:
>>
>> export PROMPT_COMMAND='history -a'
>>
>> So I have to use separate HISTFILEs or else the commands from different
>> projects will be interlaced.  If I don't write every command immediately to
>> a histfile, when the sessions are killed by power failure or network
>> outage, I'll lose all the command histories.
>>
>> I have ways to work around the tty issue using history commands, copying
>> files, etc.  But I can also get the tty I want, if it is unused, by
>> occupying the lower /dev/pts/ numbers.
>>
>> This is working great for me, and I would recommend it strongly to others.
>> I'm sharing the relevant lines from my .bashrc below.  It would be great if
>> anyone has anything to add or to correct.  Thanks.
>>
>> Mike
>>
>>
>>
>> # Use multi_history?  Change to "yes" if you will often have multiple
>> # interactive bash shells running simultaneously on this system.  This
>> # will cause you to save multiple history files, one per shell -- see
>> # HISTFILE info below.
>> multi_history=yes
>>
>>
>> ##############################################
>> #
>> # HISTORY settings
>> #
>> ##############################################
>>
>> # append to the history file on exit, don't overwrite it
>> shopt -s histappend
>>
>>
>> # If $multi_history=yes, then tty is used to create a different
>> # $HISTFILE for every tty.  This will be a big advantage for people
>> # who have multiple interactive bash shells running simultaneously.
>> # It is not recommended for people who only run one at a time.
>>
>> # if requested, add the tty to the name of the history file
>> if [ "$multi_history" = "yes" ]; then
>>
>>    export HISTFILE=~/.bash_history$(tty | sed 's|/|_|g')
>>    if [ ! -s $HISTFILE ] ; then
>>       if [ -s ~/.bash_history_init ] ; then
>>          cp -fp ~/.bash_history_init $HISTFILE
>>       else
>>          echo -e "#1\ncd" >> ~/.bash_history_init
>>          chmod 600 ~/.bash_history_init
>>          cp -fp ~/.bash_history_init $HISTFILE
>>       fi
>>    fi
>> fi
>>
>> # immediately write every new command to the history file
>> export PROMPT_COMMAND='history -a'
>>
>> # don't put duplicate lines in the history nor lines beginning with a space
>> export HISTCONTROL=ignoreboth
>>
>> # For setting history length see HISTSIZE and HISTFILESIZE in bash(1)
>> # Save 10,000 lines of history but 100,000 lines in the history file:
>> export HISTSIZE=10000
>> export HISTFILESIZE=100000
>>
>> # commands to ignore and not add to history (recommendation: do not
>> # add "cd" to this list because doing so makes it hard to track the
>> # default directory where commands were executed)
>> HISTIGNORE='ls:laf:jobs:bg:fg'
>>
>> # set time format for history file display
>> # in saved file, it uses seconds since 1/1/1970, but those can be converted
>> # for viewing using this command (where 1234567890 is the date in seconds):
>> # date +"%F %T" -d @1234567890
>> export HISTTIMEFORMAT="%F %T%t"
>>
>>
>>
>> ##############################################
>> #
>> # Prompt settings
>> #
>> ##############################################
>>
>> # somone wrote, "color prompt is turned off by default to not distract
>> # the user: the focus in a terminal window should be on the output of
>> # commands, not on the prompt"
>> # Mike Miller disagrees -- when looking at the scrollback in the
>> # command window, the focus often is on the prompt because the prompt
>> # shows where the commands are.
>> force_color_prompt=yes
>>
>> if [ -n "$force_color_prompt" ]; then
>>    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
>>       # We have color support; assume it's compliant with Ecma-48
>>       # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
>>       # a case would tend to support setf rather than setaf.)
>>       color_prompt=yes
>>    else
>>       color_prompt=no
>>    fi
>> fi
>>
>> if [ "$color_prompt" = yes ]; then
>>    if [ "$multi_history" = "yes" ]; then
>>       # add tty info to prompt for multi_history
>>       PS1="\[\e]0;\u@\h : $(tty) : \w\a\]\n\[\e[32m\]\u@\h\[\e[34m\]:\[\e[36m\]$(tty)
>> \[\e[33m\]\w\[\e[0m\]\n\$ "
>>    else
>>       PS1='\[\e]0;\u@\h: \w\a\]\n\[\e[32m\]\u@\h
>> \[\e[33m\]\w\[\e[0m\]\n\$ '
>>    fi
>> else
>>    if [ "$multi_history" = "yes" ]; then
>>       # add tty info to prompt for multi_history
>>       PS1='\n\u@\h $(tty) \w\n\$ '
>>    else
>>       PS1='\n\u@\h \w\n\$ '
>>    fi
>> fi
>> unset color_prompt force_color_prompt
>>
>> _______________________________________________
>> TCLUG Mailing List - Minneapolis/St. Paul, Minnesota
>> tclug-list at mn-linux.org
>> http://mailman.mn-linux.org/mailman/listinfo/tclug-list
>>
>