Em primeiro lugar, não sei de nada que exista assim. Em segundo lugar, esta não é uma resposta completa, apenas partes, mas não posso postar um comentário apenas respostas.
Eu fiz parte disso, abrindo um terminal gnome que resume o histórico de comandos de uma sessão de terminal anterior (usei isso para capturar comandos durante longos testes de software). Você não precisa capturar o histórico separadamente, apenas especifique qual arquivo o terminal deve usar. Chame esse script de "myterm":
#/bin/bash
TERMDIR=~/.myterms
if [ ! -d $TERMDIR ] ; then
mkdir $TERMDIR
fi
TERMUID=
if [ -z "$TERMUID" ] ; then
# generate unique id for new terminal
TERMUID="'basename \'tty\''-'date +'%s''"
fi
HISTFILE=$TERMDIR/$TERMUID gnome-terminal
Portanto, executar myterm sem um argumento colocará um novo arquivo de histórico em TERMDIR. Se mais tarde você executar myterm com um dos nomes de arquivos em TERMDIR como argumento, ele retoma o histórico desse terminal. Se você tiver um conjunto fixo de terminais, também poderá dispensar a geração de uid aleatória e usar apenas nomes fixos.
Eu sei que você quer fazer muito mais do que isso, mas um requisito não está claro para mim - se você fechar um terminal manualmente, você precisa esquecê-lo? ou seja, remover seu histórico e não reabrir no login? Isso pode ser um pouco complicado, pois não tenho certeza de como detectar fechamento manual em oposição a fechamento forçado durante logout ou desligamento.
A reabertura dos terminais no login é simples o suficiente pela varredura do TERMDIR; ou seja, a existência do arquivo de histórico sinaliza que o terminal é necessário.
Mais difícil está mudando para o último diretório de trabalho. Cada terminal filho conhece seu diretório no momento em que ele é fechado, via $ PWD, mas ofc myterm não pode ler o ambiente filho para gravar isso em uma loja. Não há problema se é conhecido, no entanto; é só usar
HISTFILE=$TERMDIR/$TERMUID gnome-terminal --working-directory somedir
Você pode precisar escrever um monitor que seja executado durante sua sessão de usuário para
- detecta quando um terminal está fechado e remove seu histórico
- periodicamente detecta o diretório de trabalho e armazena isso
dependendo de suas necessidades.