Busca

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



 

Aprenda inglês em casa

Baixe gratuitamente as duas primeiras aulas

English for Reading and Listening

Receba por email, diariamente, mensagens contendo materiais para leitura e audição, incluindo arquivos no formato MP3 gravados por falantes nativos.

Saiba mais e faça sua inscrição

você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Algumas Dicas de Bash

Por Rodrigo Bernardo Pimentel

Data de Publicação: 28 de Junho de 2007

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.

Publicado originalmente na Dicas-l em 1 de agosto de 2000
Versão para impressão
  • Currently 3.07/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (167 votos)

Artigos Publicados


Linux Shell Script em Newsgroup

Servidor: news.gmane.org

Grupo: gmane.org.user-groups.programming.shell.brazil


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.


Opinião dos Leitores

Renato Rudnicki
02 Jul 2007, 10:24
Apenas um complemento. Utilizando o comando history -c ele apaga a lista de comandos do history.

[]s...Renato
*Nome:
Email:
Me notifique sobre novos comentários nessa pagina
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Recomende este site
Recomendar este artigo