Acho que trabalho bastante em um projeto em um diretório definido. Às vezes - alguns meses depois - preciso refazer algo nesse projeto, mas não consigo me lembrar do que fiz. Uso o mercurial ou o git para rastrear alterações nos arquivos, mas quero poder lembrar quais comandos foram emitidos nesse diretório.
Pesquisando meu histórico de shell não é muito informativo. Já registro tudo nos meus arquivos de histórico. * _, Mas quero uma lista das coisas que fiz em ~ / foo / bar, e não todas as outras (milhões) de coisas que fiz naquela semana. Provavelmente nem me lembro em que mês trabalhei pela última vez naquele projeto em particular.
Alguém tem alguma idéia de como um arquivo de log do diretório do projeto de todos os comandos do shell que eu usei? Estou visualizando um comando algo como:
workon myproject
... que definiria o arquivo de log do shell como ~ / myproject / .history.log, carregaria o histórico anterior desse arquivo de log e talvez atualizasse minha solicitação para me dizer em que diretório estou trabalhando (como, por exemplo, vcprompt para fornecer a versão informações de controle).
Existe algo assim por aí?
Você pode estar interessado em um plugin que escrevi chamado directory-history for zsh.
Veja aqui: https://github.com/tymm/directory-history
Embora não se ajuste realmente ao seu fluxo de trabalho no meu projeto , ele deve se encaixar perfeitamente às suas necessidades.
Ele cria um histórico que inclui diretórios.
Ao pesquisar seu histórico, você primeiro obtém comandos do diretório em que se encontra.
Se não houver comandos para esse diretório, ele retornará a um histórico global e sugerirá comandos usados em outros diretórios.
fonte
Se você quiser algo simples, poderá ter seu
.history.log
arquivo como tal:Em seguida, a execução do arquivo incluiria
cat
os comandos listados nele.Você também pode agrupar esses comandos em arquivos separados por funcionalidade como convenção:
Isso tem a vantagem de trabalhar fora da caixa e não poluir seu ambiente.
fonte
README.md
ou criar outros.md
arquivos por tópico e apontá-los a partir do leia-me. Isso se você tiver uma interface de controle de fonte amigável à redução de preço.Para obter um arquivo de histórico local para um diretório, adicionei a seguinte linha ao meu comando bash prompt.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
O comando
touch .local_history
em um diretório fornece um arquivo de histórico local para todos os comandos executados nesse diretório, sem perder o arquivo de histórico principal. Algo semelhante funcionaria no zsh, eu acho.fonte
No bash, pelo menos, o HISTFILE é consultado apenas no início da instância do shell. A ideia por dir não funcionará aqui, a menos que o exemplo 'workon' acima crie uma instância de shell.
Talvez você possa olhar para algo como
Mas o script também cria um subshell.
Em resumo, você provavelmente precisará de níveis sujos de subcascas para fazer com que isso funcione.
fonte
Eu trabalhei em casas de software de produção onde apenas criamos novos usuários e grupos para várias funções. Novas contas de usuário especificamente para gerenciamento de configuração ou criação de software com diferentes níveis de visibilidade em outras áreas funcionais relacionadas por meio de associação ao grupo e ACL, e o histórico de comandos executado por, por exemplo,
cmmgr
seria salvo em~cmmgr/.bash_history
, abldmgr
palavra relacionada seria salva em~bldmgr/.bash_history
etc. Infelizmente, para fazer login, um usuário deve possuir seu diretório de login. Portanto, uma área do projeto foi configurada em um disco separado completamente. A propriedade do criador do arquivo mostrou qual área funcional criou os arquivos na área do projeto, para a qual o apropriado.bash_history
pode ser examinado.A abordagem acima, no entanto, não fornece a granularidade desejada, no entanto, fornece um esqueleto de que, quando combinado com a associação ao grupo, um usuário pode alternar grupos com os
newgrp
quais efetivamente cria um novo shell e ambiente e, em seguida, usar um das abordagens fornecidas nas outras respostas para alterar o~/.bash_history
arquivo efetivo ao trocar de chapéu ,cmmgr
para que umnewgrp
possa gerenciar o que~/.bash_history
é usado e salvo por pasta à medida que alguém entra e sai do novo grupo por meio donewgrp
comando Confiraman newgrp
. Existem alguns pontos de partida nesse sentido em outras respostas a esta pergunta. Eles devem funcionar com o paradigma do grupo UNIX - a maioria das porcas e parafusos são manipulados pelas rotinas de inicialização e saída do shell, conforme controlado pelonewgrp
invocação. Confiranewgrp -l
:fonte
Apresento aqui duas variantes, mas aplicáveis apenas ao Z Shell .
Variante 1
Foi nisso que pensei pela primeira vez ao ler o título da sua pergunta. Com esta variante, você pode alternar entre dois modos de histórico com ALT+ h: Global ou local , onde o último alterna para um histórico por diretório automaticamente no chdir . O histórico global acumula todos os comandos emitidos.
Demonstração
O script (a ser incluído
~/.zshrc
ou a fonte)Variante 2
Pensando nisso novamente, parece que o histórico por dir é muito refinado e você também descreve mais um histórico por projeto no corpo da pergunta. Então, criei outra variante com uma função workon para alternar entre projetos. Todo projeto tem seu próprio arquivo de histórico
~/.zsh_projhistory_[name]
.Demonstração
O script (a ser incluído
~/.zshrc
ou a fonte)fonte
Depois de trabalhar em uma área por algum tempo.
history> hist1.txt e depois history> hist2.txt
Às vezes eu uso a data para o nome do arquivo. história> hist20180727.txt
Dessa forma, há um histórico recente de comandos para cada diretório.
fonte