Como armazenar e acessar rapidamente os comandos usados com frequência?

35

Eu tenho um monte de comandos que eu rotineiramente preciso executar, muitas vezes com a menor variação.

Agora eu estou armazenando todos eles em .bash_history e use CTRL - R para acessá-los, mas eu me pergunto se há uma maneira melhor. O que estou procurando:

  • Fácil adicionar um novo comando
  • Fácil de pesquisar e reexecutar um comando desejado
  • Evite comandos indesejados em sugestões

Infelizmente, bash_history não é tão strong na terceira demanda: se eu fizer alguns cd e ls , ele preencherá o arquivo de histórico rapidamente. Eu aprendi recentemente sobre HIST_SIZE e que você pode configurar o histórico para evitar duplicatas ou certos comandos, mas antes de configurar tudo isso, eu queria ter certeza de que é o melhor caminho.

    
por Konerak 07.12.2011 / 09:15

12 respostas

20

Acho muito útil os seguintes comandos readline

history-search-backward,
history-search-forward

(esteja ciente de que eles são diferentes do usual reverse-search-history , forward-search-history , amarrado a Ctrl - R , Ctrl - < kbd> S ).

Eu tenho esses comandos associados a Ctrl - Acima e Ctrl - Abaixo colocando as seguintes linhas em ~/.inputrc :

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

Como eles funcionam: escreva alguns caracteres do início do comando, pressione Ctrl - Acima e o próximo comando mais antigo começando com esse prefixo será mostrado, pressione novamente para ver o próximo e assim por diante. Quando estiver satisfeito, depois de possivelmente modificar o comando, pressione Enter para executar.

    
por 07.12.2011 / 09:31
55

Outra dica: às vezes uso comentários para marcar / marcar um comando:

my_command #bookmark

então:

[ctrl-r]#bookmark
    
por 07.12.2011 / 13:37
6

Use "alias"

alias é uma ótima ferramenta para isso.

  • Você pode declarar facilmente um na linha de comando a ser usado durante a sessão atual do shell.
  • Se você for usá-lo no futuro, poderá adicioná-lo à sua configuração de shell.

Quando você usa um alias, é exatamente como se você tivesse digitado, então é bastante flexível. Por exemplo, você pode usá-lo com pipes:

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

Você deve conseguir fazer "pequenas variações" ao passar as sinalizações que você ainda não especificou.

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches
    
por 07.12.2011 / 20:45
6

Embora o escopo seja muito limitado, gostaria de destacar esses dois espaços reservados para expansão:

!! 

é uma expansão de espaço reservado para o último comando. Útil se você esqueceu de colocar sudo antes do comando.

!$ 

repete o último parâmetro. Útil se você quiser repetir um comando diferente com a/very/long/path/name/you/do/not/want/to/type/again

    
por 08.12.2011 / 14:58
5

Eu crio scripts de shell mínimos para os meus comandos frequentes e dou nomes curtos. Eles são todos armazenados no mesmo lugar, que é adicionado a PATH .

Dessa forma, eu tenho acesso a atalhos para comandos muito complexos e, ao contrário de alias , posso transformar as partes alteráveis da minha tarefa em argumentos de linha de comando do meu atalho.

    
por 07.12.2011 / 16:50
4

Estou mantendo uma cópia de .bash_history no Git . Para simplificar isso, eu configurei

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

em .bashrc , e os seguintes comandos (modificados para uso geral) em um script de limpeza

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

que eu corro antes de adicionar linhas em git gui . Como o arquivo de histórico é modificado com todos os comandos, também tenho um comando especial para atualizar esse repositório específico:

git stash && git pull && git stash pop
    
por 07.12.2011 / 11:08
2

Entre todas as outras respostas aqui envolvendo história.

eu defino

HISTFILESIZE=2024
HISTSIZE=1024

em ~ / .bash_profile

Além dos outros comentários, re: history

Outra funcionalidade útil ...

Começando um recall de histórico com

!first few letters<ESC>Ctrl-E

vai lembrar o último comando que começou com primeiras letras

por exemplo:

!find<ESC>Ctrl-E

Você não mencionou se está usando ou não uma GUI ou apenas uma linha de comando. Se você estiver usando uma GUI, você pode usar um dos gerenciadores de área de transferência persistentes para copiar / colar comandos, userids, senhas, URLs, etc. usados comumente.

    
por 08.12.2011 / 17:13
0

Aprender a usar Ctrl-R e Ctrl-S permite procurar facilmente os comandos que você está procurando no histórico, e você já encontrou a variável de ambiente HISTCONTROL para ignorar duplicatas e alterar o site do arquivo de histórico do bash.

Eu costumo fazer muitos Ctrl-R seguido por Ctrl-E e mudar alguns parâmetros, se eu pulei um comando encontrado apertando Ctrl-R várias vezes, Ctrl-S para o resgate.

    
por 07.12.2011 / 15:19
0

Eu sempre prefiro armazenar os últimos comandos usados e suas saídas.

script filename
    
por 08.12.2011 / 09:59
0

Além das boas respostas acima, se você estiver usando um gui baseado no kde ou no gnome, o AutoKey pode ser incrivelmente útil.

https://code.google.com/p/autokey/

Ele permite que você crie frases que são acionadas digitando alguns caracteres ou pressionando uma tecla de atalho. Essas frases são então substituídas ou adicionadas à sua entrada.

Ele também suporta scripts escritos em python que você pode fazer quase tudo se você souber python. Eu não sei python ainda, mas eu já estou recebendo alguns scripts muito básicos para fazer coisas legais.

Tudo parece estar vindo do seu teclado, por isso funciona com qualquer aplicativo que aceite entrada por teclado - e com sua própria área de trabalho.

Ele tem muitas opções para controlar como e onde essas coisas são ativadas, então você pode ter algumas que funcionam apenas em seu console e outras que só funcionam em outra janela. Você também pode definir frases para serem executadas assim que digitar a string que as aciona ou esperar até que você as dê o OK.

    
por 11.12.2011 / 04:46
0

Como outros já disseram, o alias é seu amigo. Para coisas um pouco mais complicadas (quando você precisa de argumentos em algum lugar entre instruções) eu uso funções no meu .zshrc, como:

function ff() { find . -iname "*$**" }

que funciona como o locate (eu uso quando por algum motivo o db não está disponível). Ou

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

por um substituto de killall.

    
por 14.12.2011 / 07:39
0

Além de usar Cntl-R para olhar para trás no .bash_history , eu também tenho um arquivo README no diretório ~/develop onde eu coloco comandos longos como git / svn , então eu posso voltar para eles mais tarde quando eu precisar. Da mesma forma, estou planejando ter um arquivo ~/install/README para colocar todos os nomes de pacotes comuns que eu normalmente instalo depois de instalar uma nova versão do Linux / Ubuntu. Então a ideia é ter um arquivo README dentro de cada diretório, por exemplo Video, Audio, ... e coloque neles os comandos / dicas comuns, que você pode precisar saber mais tarde.

    
por 08.12.2011 / 20:45