Como ter um histórico de comandos separado para sessões diferentes para o mesmo usuário?

8

Eu enfrento esse problema em alguns servidores Unix. Quando abro uma sessão diferente para o mesmo usuário, o histórico de comandos é compartilhado por toda a sessão. Isso cria problemas se, por engano, pressionar Ctrl-Pou up arrowe pressionar Enter. Em uma ocasião, acabei executando, rm -rf *felizmente, estava no diretório em que não tenho permissão para remover arquivos.

Como ter um histórico de comandos separado para sessões diferentes para o mesmo usuário? Na maioria das vezes, estou usando os shell ksh e tcsh.

Hemant
fonte

Respostas:

8

Do faq do ksh :

Q1 Como obtenho arquivos de histórico separados para shell?

A1 O ksh usa um arquivo de histórico compartilhado para todos os shells que usam o mesmo nome de arquivo de histórico. Isso significa que os comandos inseridos em uma janela serão vistos por conchas em outras janelas. Para obter janelas separadas, a variável HISTFILE precisa ser definida com um nome diferente antes da criação do primeiro comando do histórico.

theotherreceive
fonte
11

Você pode adicionar HISTFILE=~/.hist$$ao seu .profile. Isso deve gerar um arquivo exclusivo por sessão.

Você vai acabar com um grande número de, .hist*então sugiro que você os remova ocasionalmente.

Gert
fonte
2

Suponho que você esteja falando de sessões simultâneas; separar sessões um após o outro não é muito útil: você nunca mais seria capaz de usar o histórico, porque todas as sessões seriam únicas. Se fosse esse o caso, provavelmente seria melhor desativar o histórico de comandos.

Se estamos falando sobre a separação de sessões simultâneas, recomendo que você use o Bash. Tenho certeza de que não estou obtendo o histórico de comandos de duas sessões simultâneas misturadas a ele. O Bash grava o histórico apenas .bash_historyno logout, portanto, o histórico de comandos não será misturado até depois do logout. Desde que o uso do Bash seja aceitável, isso resolveria o seu problema?

wzzrd
fonte
Obrigado pela sua resposta. Estou trabalhando no HP-UX e não tem o bash instalado e não tenho permissão para instalá-lo :(.
Hemant
1

Vou acrescentar algo à resposta de Gert.

Gert's

Você pode adicionar HISTFILE = ~ / .hist $$ ao seu .profile. Isso deve gerar um arquivo exclusivo por sessão.

Meu

Você pode remover esses arquivos automaticamente adicionando o seguinte.

trap 'rm ${HISTFILE}' exit

Robert Jacobs
fonte
2
Seja um pouco cauteloso com as armadilhas de saída - o shell não as empilha como você poderia esperar - para que qualquer outra configuração de uma armadilha de saída substitua todas as anteriores. Eu escrevi um empilhador para armadilhas, mas quase explodiu todos os pavios mentais que eu tinha.
David collier
-1

Você poderia usar a tela . Também criei uma variável que foi definida pelo meu perfil do konsole e dei a cada uma das sessões um arquivo de histórico diferente , apenas maneiras que consigo pensar.

xenoterracida
fonte
Não consigo instalar a tela. nem sequer está compilando no meu servidor.
Hemant
Eu não tenho certeza de como tela iria dar-lhe essa capacidade de qualquer maneira
Michael Mrozek
@ Michael, você pode ter sessões diferentes com a tela e a tela tem sua própria história. Não sei se alguém me disse para resolver meu problema com a tela ... eu não gostei da tela. É lamentável que isso tenha sido modificado quando minha segunda resposta for essencialmente a mesma que as outras que foram modificadas. @ Hemant ... e eu deveria saber disso? Não uso a tela para fazer isso no meu sistema. Eu apenas sei que isso permite um efeito semelhante feito corretamente.
Xenoterracide
Acho que sei o que você está descrevendo, mas não é um recurso de tela, é apenas um efeito colateral do modo como as conchas funcionam. Se você abrir dois shells, os comandos digitados em um não aparecerão no histórico do outro, a menos que o shell o suporte especificamente (por exemplo, o ZSH, mas você precisa habilitá-lo explicitamente). Ele não mantém históricos separados, ambos gravam no arquivo de histórico principal, você simplesmente não consegue ver as alterações de cada shell, porque normalmente os shells não verificam as alterações no arquivo de histórico depois de carregados
Michael Mrozek
@MichaelMrozek O shell korn possui um histórico compartilhado para todas as janelas; isso não pode ser desativado. Usar screennão ajudará em nada.
FUZxxl