AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 669971
Accepted
Att Righ
Att Righ
Asked: 2021-09-22 05:27:58 +0800 CST2021-09-22 05:27:58 +0800 CST 2021-09-22 05:27:58 +0800 CST

Zsh: posso ter um histórico combinado para todos os meus shells

  • 772

É possível ter um único histórico de comandos que seja compartilhado entre todos os shells?

Acho que, por padrão, o histórico é substituído pelo shell que sai primeiro. Antes eu fiz coisas onde cada shell tem um "nome" e seu próprio arquivo de histórico, mas meu uso de shells é um pouco mais leve hoje em dia, então parece um exagero.

Atualizações

Parece que eu não habilitei o incappendhistory:

> setopt | grep inc

A execução setopt incappendhistorycorrigiu isso. Pude então ver, olhando para o arquivo de histórico, que esses arquivos foram anexados imediatamente.

No entanto, esse histórico só parece estar disponível para outros shells depois que um novo shell é aberto (o que provavelmente é o comportamento que procuro). Configuração sharedhistorycom setoptcomandos feitos em outros shells imediatamente disponíveis. Na verdade, não acho que seja isso que estou procurando - já que ter um histórico distinto em diferentes shells é útil. Só não quero perder a história.

zsh command-history
  • 1 1 respostas
  • 786 Views

1 respostas

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2021-09-22T12:03:03+08:002021-09-22T12:03:03+08:00

    Primeiro, por padrão, o zsh não salva o histórico de comandos. Você precisa definir HISTFILEo caminho para o arquivo onde deseja salvar o histórico e SAVEHISTo número de linhas que deseja salvar. Veja o histórico de comandos no Zsh . No restante desta resposta, assumirei que o histórico está sendo salvo e discutirei quando ele for salvo e carregado.

    Por padrão, o zsh carrega o histórico quando inicia e o salva quando sai. Ao salvar o histórico, ele anexa o histórico da sessão atual ao arquivo de histórico. Portanto, nenhum histórico é perdido, mesmo quando há sessões simultâneas (até que o arquivo de histórico atinja 1,2 vezes $SAVEHISTas linhas, ponto em que o zsh cortará o arquivo). A principal vantagem dessa abordagem é que as linhas de uma sessão permanecem agrupadas. Uma desvantagem é que as linhas da sessão A só aparecerão nas sessões iniciadas após a saída da sessão A. Outra desvantagem é que, se sua máquina (ou zsh) travar, o histórico será perdido (mas o histórico será salvo se o terminal simplesmente desaparecer, por exemplo, porque uma conexão SSH morre devido a um problema de rede).

    Se você ativar a share_historyopção, o zsh salvará cada linha do histórico assim que for inserida e carregará novas linhas do histórico assim que estiverem disponíveis. (Ou mais precisamente, antes de exibir um novo prompt; o zsh não lerá o histórico enquanto você estiver editando uma linha de comando.) A principal vantagem é que as linhas do histórico estão disponíveis imediatamente em todas as sessões. A principal desvantagem é que as linhas de sessões diferentes acabarão misturadas, de modo que as linhas consecutivas no histórico podem não fazer sentido umas em relação às outras.

    Existem também as opções inc_append_historye inc_append_history_time. Eles fazem com que o zsh salve o histórico assim que executa cada comando, mas ele não lê as novas linhas do histórico automaticamente (exceto quando é iniciado, é claro). A _timevariante salva o histórico depois de executar um comando, em vez de antes, o que permite que o zsh economize o tempo que levou para ser executado.

    Você pode desativar a append_historyopção e o zsh substituirá o arquivo de histórico ao salvá-lo, em vez de anexá-lo. Como consequência, se você iniciar a sessão A, iniciar a sessão B, sair de A e sair de B, o histórico de A será perdido. Não consigo pensar em uma boa razão para escolher esse comportamento (mas é o padrão do bash).

    Você pode importar novas linhas do arquivo de histórico a qualquer momento executando fc -RI. Isso é útil se você não usar share_history, para importar explicitamente o histórico de outras sessões de tempos em tempos.

    Você pode salvar novas linhas no histórico a qualquer momento executando fc -AI. Isso é útil se você não usar inc_append_historyou share_history, para exportar explicitamente o histórico da sessão atual de tempos em tempos.

    O que descrevi como padrões nesta resposta são os padrões zsh. Algumas distribuições e a maioria das estruturas de configuração do zsh pelo menos habilitarão o histórico por padrão e podem alterar algumas opções relacionadas ao histórico.

    • 4

relate perguntas

  • Listar arquivos que não possuem outro arquivo com sufixo

  • Em que circunstâncias o executável encontrado primeiro no caminho não será usado

  • Symlinking para todos os arquivos de ponto e diretórios

  • Como incrementar uma variável nomeada dinamicamente em `zsh`

  • Por que não consigo definir uma variável somente leitura chamada path no zsh?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve