Comandos e expansões do histórico Bash

Comandos E Expansoes Do Historico Bash



Neste guia, demonstraremos como trabalhar com os comandos de histórico do Bash.

Pré-requisitos:

Para executar as etapas demonstradas neste tutorial, você precisa dos seguintes componentes:

  • Um sistema Linux devidamente configurado. Confira como configurar uma VM Ubuntu no VirtualBox .
  • Familiaridade básica com a interface de linha de comando.

Histórico do Bash

Bash é o shell padrão na maioria dos sistemas Linux modernos. Como sucessor do “sh”, o shell original do UNIX, ele vem com vários recursos e melhorias, como manipulação de diretório, controle de tarefas, aliases, histórico de comandos e muito mais.







O Bash acompanha todos os comandos que foram executados anteriormente no terminal. Isso pode ser incrivelmente útil em várias situações, como depuração. Também pode reduzir a necessidade de digitar os mesmos comandos/semelhantes repetidamente.



Para gerenciamento de histórico, o Bash vem com dois comandos integrados:



$ tipo história





$ tipo FC

Para armazenar o histórico, o Bash usa duas técnicas diferentes:



  • Sempre que se trabalha com uma sessão de shell, seu histórico é armazenado na memória.
  • Quando fechado, o histórico armazenado na memória é despejado em um arquivo de histórico.

O arquivo de histórico padrão que o Bash usa está localizado em:

$ gato ~ / .bash_history

Há também um punhado de variáveis ​​de ambiente e atalhos de teclado que mudam como o Bash lida com o histórico.

Trabalhando com o histórico do Bash

Uso básico

Para obter a lista de comandos executados recentemente, use o seguinte comando:

$ história

Aqui, todos os comandos armazenados no buffer são listados. Cada comando tem um valor numérico atribuído. O comando mais antigo é atribuído com 1.

Podemos limitar o número de comandos a serem impressos usando o seguinte comando:

$ história N

Aqui, N é um inteiro onde N >= 0. A saída contém os últimos N comandos do histórico.

Também podemos usar a saída em conjunto com grep para filtragem:

$ história | pegada < corda >

Para navegar por um longo histórico, podemos usar o comando “less”:

$ história | menos

Excluindo comandos do histórico

Se você precisar remover um comando específico do histórico, use os seguintes comandos:

$ história

$ história -d < command_number >

$ história

Da mesma forma, para remover os comandos de M a N do histórico, podemos usar os seguintes comandos:

$ história

$ história -d M-N

$ história

Para limpar o histórico do buffer de RAM da sessão de terminal atual, use os seguintes comandos:

$ história -c

$ história

Para limpar o histórico do arquivo de histórico armazenado no disco, podemos sobrescrevê-lo completamente com NULL:

$ gato / desenvolvedor / nulo > $HISTFILE

Configurações do Histórico do Bash

Existem várias maneiras de ajustar como o Bash lida com o histórico. Muitas dessas opções são gerenciadas por variáveis ​​de ambiente.

Para alterar seu valor, editamos o arquivo “bashrc”:

$ nano ~ / .bashrc

Após a edição, salve o arquivo e recarregue-o no Bash.

$ fonte ~ / .bashrc

Para fazer alterações em todo o sistema, edite o “bashrc” localizado nos seguintes locais:

$ nano / etc / bash.bashrc

$ nano / etc / bashrc

Tamanho do buffer

Conforme mencionado anteriormente, o Bash usa dois buffers para armazenar o histórico de comandos na RAM (para a sessão atual) e em um arquivo de disco (para todas as sessões anteriores).

Os tamanhos desses buffers são controlados por duas variáveis ​​de ambiente:

  • HISTSIZE : Define o número de entradas a armazenar no buffer de RAM.
  • HISTFILESIZE : Define o número de entradas a serem armazenadas no arquivo em disco.

Podemos alterar seu valor no “bashrc” para atender às nossas necessidades:

$ nano ~ / .bashrc

Por exemplo, para armazenar 5.000 entradas em ambos os buffers, atualize “bashrc” com o seguinte código:

$ HISTSIZE = 5000

$ HISTFILESIZE = 5000

Exclusão de comando

Por padrão, o Bash armazena todos os comandos executados nos buffers do histórico. No entanto, podemos configurá-lo para que o Bash ignore determinados comandos. Pode ser útil em situações em que você precisa executar os mesmos comandos inúmeras vezes, enchendo o buffer com spam.

  • HISTCONTROL

Vamos começar com o seguinte exemplo de comando:

$ eco 'monge' && história 5

$ eco 'bonk' && história 5

Como demonstra a saída do comando history, apenas o primeiro comando echo é registrado, mas não o segundo.

Este é o funcionamento da variável de ambiente HISTIGNORE. Ele diz ao Bash para não registrar os comandos no buffer do histórico com base em certos padrões. Estão disponíveis os seguintes valores:

  • ups ignorados : não é registrado se um comando corresponder à entrada do histórico anterior.
  • ignorespace : Não será registrado se um comando começar com um espaço no início.
  • ignorar ambos : Aplica-se a regra de ignoreups e ignorespace.
  • apagados : Todas as linhas anteriores que correspondem ao comando atual serão apagadas do histórico.

No primeiro exemplo, demonstramos o uso de ignorespace. No entanto, nem todas as distros podem fornecer o Bash com essa configuração. Como sempre, podemos adicioná-los ao “bashrc”:

$ HISTCONTROL =ignorar ambos

Também é possível ativar várias opções usando o seguinte comando:

$ HISTCONTROL =ignoredups:ignorespace

Aqui, ignoreups:ignorespace é o equivalente a ignoreboths.

  • HISTIGNORE

Essa variável de ambiente pode conter um ou mais padrões. Qualquer comando que corresponda a qualquer padrão descrito pelo HISTIGNORE não será registrado em nenhum buffer de histórico. Os padrões são definidos usando as expressões regulares.

A estrutura é a seguinte:

$ HISTIGNORE = '' : '' : ''

Por exemplo, para excluir os comandos history e echo do histórico Bash, atualize HISTIGNORE da seguinte maneira:

$ HISTIGNORE = 'história' : 'eco *'

Podemos usar a seguinte cadeia de comandos para testá-lo:

$ ls -eu / era / lob &> / desenvolvedor / nulo

$ história

$ eco Olá Mundo

$ história

Carimbo de data/hora

O Bash também pode ser configurado para registrar a hora em que um comando foi executado. Pode ser útil em várias situações, como depuração.

Para habilitar os timestamps no histórico do Bash, atualize o valor de HISTTIMEFORMAT:

$ HIST HORA FORMATO = ''

Todos os caracteres de controle de formato de hora disponíveis estão disponíveis na página man do comando date.

$ homem data

A lista a seguir inclui alguns simples:

  • %T: Tempo
  • %d: Dia
  • %m: Mês
  • %y:Ano
$ HIST HORA FORMATO = '%T %d: '

Persistência do Histórico

Ao trabalhar com a CLI, em muitos casos, você se encontrará trabalhando com vários terminais. É aqui que o gerenciamento do histórico do Bash pode se tornar uma fonte de dor.

Por padrão, o arquivo de histórico é atualizado assim que a sessão é encerrada. Embora seja bom para uma única sessão, não é adequado para várias sessões simultâneas. Podemos resolver esse problema forçando o Bash a atualizar o arquivo de histórico toda vez que um comando é executado.

Para isso, atualize o valor de PROMPT_COMMAND:

$ PROMPT_COMMAND = 'história -a'

Aqui, a variável PROMPT_COMMAND pode conter comandos válidos. O conteúdo de PROMPT_COMMAND é executado antes que o Bash comece a receber a entrada do usuário. O comando “history –a” força o histórico a anexar o conteúdo ao arquivo de histórico.

Expansão da História e Designadores

O Bash vem com alguns atalhos integrados para aproveitar seu recurso de histórico. Aqui está a lista dos designadores:

  • !! : Executa o último comando do histórico.
  • !N : Executa o comando Nth do histórico.
  • !-N : Executa o comando Nth antes do comando mais recente do histórico.
  • ! : executa o comando mais recente.

A seguinte cadeia de comandos demonstra seu uso:

$ eco 1

$ eco 2

$ eco 3

$ história

$ ! eco

$ ! - 3

$ ! 1

$ !!

Alguns designadores também trabalham com os argumentos de comando do histórico:

  • !:* : Use todos os argumentos do comando mais recente.
  • !:^ : Use o primeiro argumento do comando mais recente.
  • !:N : Use o enésimo argumento do comando mais recente.
  • !:M-N : Use os argumentos de M a N do comando mais recente.
  • !:$ : Use o último argumento do comando mais recente.

A seguinte cadeia de comandos demonstra seu uso:

$ eco 1 2 3 4 5 6 7

$ eco ! : *

$ eco 1 2 3 4 5 6 7

$ eco ! :^

$ eco 1 2 3 4 5 6 7

$ eco ! : 5

$ eco 1 2 3 4 5 6 7

$ eco ! : 1 - 5

$ eco 1 2 3 4 5 6 7

$ eco ! :$

Se você precisar trabalhar com os parâmetros de um comando diferente, os designadores ficarão assim:

  • !^ : Usa o primeiro argumento do comando .
  • !$ : Usa o último argumento do comando .

A cadeia de comandos a seguir demonstra seus usos:

$ ls -lh / era / registro &> / desenvolvedor / nulo

$ tocar 1 .TXT 2 .TXT 3 .TXT 4 .TXT 5 .TXT

$ eco ! tocar ^

$ eco ! tocar $

Atalhos de teclado do histórico

Além de todos os comandos e variáveis ​​de ambiente, o Bash também oferece suporte a vários atalhos de teclado para facilitar a navegação no histórico:

  • Acima tecla de seta: rolar para trás
  • Abaixo tecla de seta: Rolar para frente

Há também atalhos de teclado disponíveis para uma pesquisa de histórico interativa:

  • Ctrl + R : Pesquise comandos no histórico.
  • Ctrl + O : Executa o comando selecionado.
  • Ctrl + G : Sair da pesquisa interativa.

Conclusão

Discutimos sobre a história do Bash em detalhes. Aprendemos como o Bash armazena o histórico de comandos e como aproveitá-lo de diferentes maneiras. Demonstramos como trabalhar com o histórico do Bash usando vários exemplos.

Interessado em aprender mais sobre o Bash? O Subcategoria de programação Bash contém centenas de guias sobre diferentes recursos do Bash.

Feliz computação!