No bash, apenas !636
será ok.
Por exemplo:
[root@ip-10-0-7-125 ~]# history | grep free
594 free -m
634 free -m | xargs | awk '{print "free/total memory" $17 " / " $ 8}'
635 free -m
636 free -m | xargs | awk '{print "free/total memory" $9 " / " $ 10}'
736 df -h | xargs | awk '{print "free/total disk: " $11 " / " $9}'
740 df -h | xargs | awk '{print "free/total disk: " $11 " / " $8}'
741 free -m | xargs | awk '{print "free/total memory: " $17 " / " $8 " MB"}'
Eu só estou querendo saber se existe alguma maneira de executar o comando 636 sem digitá-lo novamente, basta digitar algo mais o número, como o histórico 636 ou algo assim.
Sim, é chamado de "expansão de histórico". Veja
LESS='+/^HISTORY EXPANSION' man bash
para detalhes completos.
Usar um ponto de exclamação seguido por um número é sem dúvida o uso mais simples:
!636
No entanto, você também pode executar o último comando executado diretamente sem saber seu número de histórico:
!!
Ou você pode executar dois comandos de volta:
!-2
O formulário que mais uso, no entanto, é repetir o último argumento do último comando:
echo this text goes into a file > /tmp/afile.txt
cat !$
Ou digamos que estou inspecionando um arquivo. Usando a conclusão da tabulação, posso fazer o seguinte:
ls -l /really/long/path/to/some/file
less !$
Novamente, leia a man page para mais detalhes:
LESS='+/^HISTORY EXPANSION' man bash
Um bom, se você não quer primeiro histórico, anote o número, etc:
no bash (e talvez outros):
ctrl-r something
( ctrl-r
="pesquisa inversa interativa") ( something
= parte de um comando anterior)
Isso mostrará a última linha do histórico que contém something
. Para obter o anterior, faça ctrl-r (sozinho) novamente, cada vez que ele recebe uma linha anterior.
ex:
ctrl-r 10
para mostrar a última linha do histórico que contém '10' (por exemplo, a linha com $10
, no seu exemplo) e ctrl-r
novamente até você recuperar a linha do histórico que estava procurando
Quando a linha que você deseja aparecer, apenas Enter
para executá-la (ou você também pode editá-la, usando arrow keys
, backspace
e ctrl-a
para ir para o início da linha, ctrl-e
para chegar ao fim, ctrl-k
: para "matar" do cursor para o final da linha (= exclui + salva em um buffer), ctrl-y
: para restaurar, do buffer, um bit anteriormente morto, etc. )
Se você quiser pesquisar para a frente (ctrl-s), primeiro precisa desativar o XON : consulte link :
"apenas para desativar o XON / XOFF executando
stty -ixon
" (e então você poderá usar ctrl-s, sem congelar o terminal)
Você pode usar o shell embutido fc :
fc -s 636
Existe o comando HSTR
- hh
para a seleção de comandos interativos bash
e zsh
, melhor que o Ctrl -R pesquisa inversa:
éinterativo,paraquevocêpossaprocurareeditarocomandoantesdeexecutá-lo.
NoUbuntu,vocêpodeinstalarhh
comoseguinteone-liner:
sudoadd-apt-repositoryppa:ultradvorka/ppa&&sudoapt-getupdate&&sudoapt-getinstallhh&&hh--show-configuration>>~/.bashrc
oupassoapasso:
sudoadd-apt-repositoryppa:ultradvorka/ppasudoapt-getupdatesudoapt-getinstallhh
Instalehh
noFedora,RHELouCentOS:
sudodnf|yuminstallhstr-y
NomacOScomhomebrew
:
brewinstallhh
...entãoconfigure-ocom:
hh--show-configuration>>~/.bashrc
IssosubstituiráocomportamentopadrãoCtrl-R.
Executehh--show-configuration
paradeterminaroqueseráanexadoaoseuperfilBash.
MaisopçõesdeconfiguraçãodisponíveisnapáginainicialdoprojetonoGithub:
Tags bash command-history