Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Bash - como usar o histórico de comandos

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 24 de Julho de 2000

O "history" (ou histórico) no bash, apesar de extremamente poderoso, é muito pouco usado, além do tradicional "setinha pra cima" para exibir os últimos comandos.

Seu comportamento é regido por algumas variáveis:

HISTSIZE

Tamanho (em número de comandos) do histórico.

HISTFILE

Arquivo em que serão salvos os comandos (normalmente ~/.bash_history).

HISTFILESIZE

Tamanho máximo (em linhas) do arquivo selecionado acima. Se um valor for especificado, o arquivo será truncado para conter apenas o número especificado de linhas.

Eu, por exemplo, uso HISTSIZE e HISTFILESIZE como 5000.

Outra variável interessante é

HISTCONTROL

Pode ter um dentre três valores: "ignorespace", "ignoredups" ou "ignoreboth". Se se usar o primeiro, comandos começando com espaço não vão para o histórico. Com o segundo (e isso é particularmente interessante), se um comando é executado mais de uma vez em seguida, só uma ocorrência vai para o histórico. O terceiro implementa ambas as funcionalidades.

Finalmente, para quem costuma quebrar comandos em várias linhas (quem sabe isso não vai em outra dica? ;) , pode ser interessante fazer

  export command_oriented_history=1

(ou qualquer outro valor, basta a variável estar "setada") Isso faz com que o bash tente salvar todas as linhas do comando, ao invés de salvar cada linha como se fosse um comando diferente (o comportamento padrão).

O caracter associado ao histórico é '!' (exclamação). Aqui, é mais fácil compreender com a ajuda de exemplos:

!bla - repete o último comando começando com "bla". !?bla - repete o último comando contendo "bla". !x - repete o comando de número "x" no histórico. Similarmente, !-y - repete o "y-ésimo" comando, do atual pra trás. !! - repete o último comando (ou seja, igual a !-1) !# - repete tudo o que foi digitado na linha até aquele ponto. Por exemplo, "ls !#" geraria "ls ls"

Depois de especificada a linha de que se quer tratar (com os comandos anteriores), pode-se selecionar parte delas e modificá-la. Esse tratamento das linhas é introduzido por ':' (dois pontos).

A seleção, em sua forma mais simples, é feito indicando-se um número relativo à posição do argumento que você quer selecionar no comando (0 - zero - é o comando em si). Assim, por exemplo

  [rbp@muppets ~]$ ls bla
  ls: bla: No such file or directory
  [rbp@muppets ~]$ !!:0
  ls

A linha "!!:0" pegou a última linha e executou só o "argumento zero" (o comando em si). Poderíamos também fazer algo como:

  [rbp@muppets ~]$ man xscreensaver
  [rbp@muppets ~]$ !!:1
  xscreensaver

Pode-se selecionar uma seqüência de argumentos, com "x-y" (do argumento de número "x" ao de número "y", inclusive). Por exemplo,

  [rbp@muppets ~]$ cat script1 script2 script3
  (...)
  [rbp@muppets ~]$ !!:1-2
  script1 script2
  (...)
  [rbp@muppets ~]$ 

Complementando "^" é o argumento de número 1 (isto é, o primeiro argumento depois do comando em si), "$" é o último. Podem-se fazer abreviações como "x-" (igual a "x-$"), "-x" (igual a "1-x") ou "*" (igual a "1-$").

Para se modificar o comando em questão (ou a porção selecionada dele), o método mais comum é muito semelhante ao sed:

  [rbp@muppets ~]$ mkdir diretorio1
  [rbp@muppets ~]$ !!:s/1/2
  mkdir diretorio2

O "s/1/2" substituiu "1" por "2" no comando anterior.

Juntando tudo:

  [rbp@muppets ~]$ export EDITOR=emacs
  [rbp@muppets ~]$ !!:1:s/EDITOR=//
  emacs

Finalmente, uma dica: substituição do último comando executado pode ser feita rapidamente com

^a^b - substitui "a" por "b" no último comando.

  ______________________________________________________________________________
   Rodrigo Bernardo Pimentel <rbp@sp.conectiva.com.br>|  GPG KeyID: 0x81F85A48
   LinuxSP                 <http://www.linuxsp.org.br>|      Fingerprint:    
   AirGeeks                  <http://www.airgeeks.org>|7E62 9CA2 C95B FC86 B334
  ____________<http://www.conectiva.com.br>___________|203E C011 2E4D 81F8 5A48
  Mirrors should reflect a little before throwing back images.

Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.93/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 2.9 /5 (1435 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Read in English - Uma Maneira Divertida de Aprender Inglês