AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 415020
Accepted
Weijun Zhou
Weijun Zhou
Asked: 2018-01-06 08:03:34 +0800 CST2018-01-06 08:03:34 +0800 CST 2018-01-06 08:03:34 +0800 CST

Execute o comando do histórico com parâmetros

  • 772

Sempre que preciso digitar um comando longo, acho muito útil o ponto de exclamação para se referir ao histórico. Por exemplo, !sshpode ser usado para invocar o último sshcomando que usei. No entanto, não consigo fazê-lo funcionar quando argumentos delimitados por espaço são adicionados à pesquisa.

Ao executar !ssh -i, espero que o último comando começando com a string "ssh -i" seja executado. No entanto, o comando real que é invocado é o último sshcomando com qualquer argumento e, em seguida, "-i" foi anexado ao comando.

Posso usar, !?ssh -i?mas isso serve para fazer algo diferente e acredito que deve haver uma maneira simples de conseguir isso. Também reluto em digitar history|grep ...todas as vezes.

Então, como posso me referir a um comando no histórico que começa com uma string contendo espaço, conforme indicado acima?

Editar Parece que não expliquei a questão com clareza suficiente. Digamos que eu tenha o seguinte histórico

ssh -i identity host1
echo ssh -i
ssh host2

agora, se eu executar !ssh, o terceiro comando, ou seja, ssh host2será executado. Espero digitar !ssh -ipara obter o primeiro comando executado, mas ssh host2 -ié executado em vez disso (o que resulta em um erro). Posso usar !?ssh -i?para executar o primeiro comando somente se o segundo comando não existir .

bash command-history
  • 2 2 respostas
  • 508 Views

2 respostas

  • Voted
  1. David Aubin
    2018-01-06T08:14:00+08:002018-01-06T08:14:00+08:00

    Acredito que você deseja alterar o comportamento padrão do HISTCONTROL do bash. Desta postagem: Por que o bash não está armazenando comandos que começam com espaços?

    HISTCONTROL

    Uma lista de valores separados por dois-pontos que controla como os comandos são salvos na lista de histórico. Se a lista de valores incluir ignorespace, as linhas que começam com um caractere de espaço não são salvas na lista de histórico. Um valor de ignoreups faz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas. Um valor de ignoreboth é uma abreviação de ignorespace e ignoreups.

    Se você quiser pular o! e permitir espaços, sugiro que você tente um shell diferente do bash. Casca de peixe funciona perfeitamente para o que você está pedindo :)

    sudo apt-get install fish

    para experimentá-lo em seu shell bash, digite 'peixe'

    Se você gosta, pode persistir com:

    chsh -s /usr/bin/peixe

    • 1
  2. Best Answer
    Weijun Zhou
    2018-01-09T02:51:02+08:002018-01-09T02:51:02+08:00

    Obrigado ao comentário de Mark Plotnick. Eu encontrei uma solução. Embora não esteja usando a expansão do histórico bash. (Acredito que usar a expansão do histórico do bash para conseguir isso é impossível depois de ler [seção 9.3.1 do manual de referência do bash].( https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html )

    A solução é colocar as seguintes linhas em ~/.inputrc, ou descomentar as linhas correspondentes /etc/inputrcpara efeito global.

    "\e[5~": history-search-backward
    "\e[6~": history-search-forward
    

    O código correspondente pode ser encontrado pressionando CtrlVe, em seguida PageUp, a tecla e os comandos são retirados da seção 8.4.2 do manual do bash .

    Depois disso, posso usar PageUpa tecla para ir para o primeiro comando, como Mark comentou.

    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve