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 / 569941
Accepted
duckingChickens
duckingChickens
Asked: 2020-02-27 15:44:05 +0800 CST2020-02-27 15:44:05 +0800 CST 2020-02-27 15:44:05 +0800 CST

Existe uma maneira de salvar um comando no terminal do Ubuntu se eu não o inseri?

  • 772

Eu queria saber se havia uma maneira rápida de salvar um comando no terminal do Ubuntu. O cenário é:

Problema:

  1. Digitei um [comando longo]
  2. Esqueci que precisava executar [outro comando] antes de poder executar o [comando longo]

Eu quero ser capaz de salvar o comando para uso posterior de uma maneira fácil, não apenas colocando um #antes dele e colocando-o no histórico de teclas para cima e para baixo. Otimamente salvando-o diretamente em um registro ou na área de transferência.

Esqueci de mencionar que também não queria ecoar.

ubuntu command-line
  • 10 10 respostas
  • 8463 Views

10 respostas

  • Voted
  1. Best Answer
    JdeBP
    2020-02-27T16:51:59+08:002020-02-27T16:51:59+08:00

    Este não é o seu terminal , este é o seu shell .

    O nome do mecanismo de shell que você está procurando é kill buffer . As pessoas esquecem que os editores de linha de comando do shell têm isso. O ZLE no shell Z os possui, assim como o GNU Readline no shell Bourne Again, o libedit no shell Almquist (FreeBSD), o editor de linha do shell Korn e o editor de linha do shell TENEX C.

    Em todos esses shells no emacsmodo, simplesmente vá até o final da linha a ser salva, mate-o no head kill buffer com ⎈ Control+ U, digite e execute o comando intermediário e, em seguida, puxe o conteúdo do buffer kill com ⎈ Control+ Y. Certifique-se de não fazer nada com o buffer de eliminação ao inserir o comando intermediário.

    No vimodo Z shell in, você tem as visequências de prefixo para especificar um vibuffer de estilo nomeado para matar a linha. Você pode usar um dos outros buffers em vez do buffer padrão. Simplesmente use algo como " a d d(no vicmdmodo) para excluir toda a linha no buffer "a", digite e execute o comando intermediário e, em seguida, coloque o conteúdo desse buffer com " a p.

    Em seus vimodos, o shell Korn, GNU Readline no shell Bourne Again e libedit no shell Almquist (FreeBSD) não possuem vibuffers de estilo nomeado, apenas um buffer de corte. d dpara excluir a linha nesse buffer, seguido de colocar o conteúdo do buffer com p, funcionará. Mas ele usa o mesmo vibuffer de estilo que matar e puxar ao inserir o comando intermediário.

    • 52
  2. user7761803
    2020-02-28T05:13:12+08:002020-02-28T05:13:12+08:00

    Você não deseja anexar echo(ou qualquer outro comando do tipo no-op) à sua linha, pois você pode ter redirecionamento de E/S e eles ainda seriam executados, substituindo potencialmente qualquer arquivo que você precise acessar (até você está pronto para executar seu comando).

    Em vez disso, vá para o início da linha e insira o caractere de comentário, #. Então você pode pressionar Entere a linha será salva em seu histórico.

    Se você estiver no modo vi, ksh e bash (pelo menos) têm um comando específico para isso: entre no modo de comando (pressione Esc) e pressione o #caractere.

    Isto é especificamente para este caso de uso. A descrição deste comando no livro O'Reilly Learning the Korn Shell diz:

    Anexar # (caractere de comentário) à linha e enviá-la para o arquivo de histórico; útil para salvar um comando para ser executado posteriormente sem ter que redigitá-lo. Se a linha já começar com um #, remova o # inicial e quaisquer outros caracteres de comentário que seguem novas linhas em um comando de várias linhas.

    • 31
  3. 0x5453
    2020-02-28T12:27:40+08:002020-02-28T12:27:40+08:00

    Se estiver executando zsh, você pode usar Ctrl-Q, que executa o comando push-line. Ele salvará o que você digitou atualmente em uma pilha, limpará o prompt e, em seguida, exibirá a pilha depois de inserir seu próximo comando. Eu uso isso o tempo todo para exatamente a situação que você descreve.

    • 16
  4. Edheldil
    2020-02-28T04:14:54+08:002020-02-28T04:14:54+08:00

    Eu costumo acrescentar "'" (aspas simples) no final da linha e pressionar Enter e Ctrl-C. Mais tarde, lembro-o com Cursor Up ou Ctrl-R. Você tem que ter certeza de que não há citações perdidas antes, no entanto.

    • 6
  5. Olivier Dulac
    2020-02-28T01:32:49+08:002020-02-28T01:32:49+08:00

    Se o seu shell estiver configurado para o modo emacs (padrão usual para bash, acredito):

    #set -o | grep emacs
    emacs         on
    

    então você pode:

    <Ctrl>a or <arrowkeys> # to go to the beginning of the current line or to wherever you want
    <Ctrl>k    # to "kill" the content from the cursor position to the end of the line + SAVE it
    ... here you type the command you forgot to add ...
    <Ctrl>y    # to "yank" the SAVED line into the current editing line. or <Ctrl>p in ksh(??)
    <Enter>    # to execute it
    
    #note: you can also replace: <Ctrl>a<Ctrl>k with: <Ctrl>u # kills the whole line + SAVE it
    

    Isso é muito rápido de fazer e se torna um hábito. ctrl-k também pode ser útil para salvar apenas o "fim" de uma linha (por exemplo: 2 argumentos longos que você sabe que irá reutilizar mais tarde, que você "mata" (+salva) e que você pode "arrancar" volte quantas vezes quiser)

    Se o seu shell estiver no modo vi , você pode usar os comandos usuais do vim:

    <Esc>      # to go back to normal(command) mode, if you were in editing mode
    dd         # to delete the whole current line + SAVE it  (see note below)
    i          # to reenter editing mode
    ... here you type the command(s) you forgot ...
    <Esc>      # to return to normal mode
    p          # to paste the buffered line + place the cursor on top of the last character
    a          # to reenter editing mode past that current character
    <Enter>    # to execute it
    
    # note: instead of "dd" (kill whole line) you can simulate emacs <Ctrl>a<Ctrl>k with:
    #    | or h or l  # to go to the 1st char of the line or wherever # simulates <Ctrl>a or <arrow keys>
    #    d$  # to delete from the current position to the end of the line + SAVE it # <Ctrl>k
    
    • 4
  6. Viktor Mellgren
    2020-02-28T03:34:04+08:002020-02-28T03:34:04+08:00

    Solução alternativa que pode funcionar dependendo do caso.

    really long command thigng -flag -flag2
    

    Pressione home, digite new command e depois && para executar primeiro e, se for bem-sucedido, execute o segundo.

    first command && really long command thigng -flag -flag2
    

    No entanto, então, não será salvo como etapas separadas.

    Alternativamente:

    Se você já digitou o primeiro comando (como em enter pressionado) você pode digitar first_command && !!o que irá inserir o segundo comando em!!

    • 4
  7. mosvy
    2020-02-28T07:03:40+08:002020-02-28T07:03:40+08:00

    Você pode selecionar/copiar o texto com a GUI ou as instalações do shell e colá-lo em algum arquivo ou simplesmente não esquecer de não sobrescrevê-lo por uma seleção subsequente (para que você possa colá-lo de volta quando necessário), mas acho tão estranho: o lugar das linhas de comando completas é IMHO no "histórico de teclas para cima e para baixo".

    Em vez de adicionar a #no início da linha e pressionar <Enter>, você pode criar uma combinação de teclas que salva a linha de comando atual no histórico sem executá-la.

    Por exemplo. com bash, vinculando-o a Meta/Alt-Cou Esc-C(geralmente vinculado às capitalize-wordcombinações de teclas do emacs; use outra chave se você já estiver usando):

    bind -x '"\ec": history -s "$READLINE_LINE"; READLINE_LINE='
    

    Se você estiver usando o vi-keybindings, você pode agachar o não utilizado ^Gpara isso:

    bind -x '"\C-g": history -s "$READLINE_LINE"; READLINE_LINE='
    

    Isso também limparia a linha depois; se você não quiser isso (e preferir cancelar manualmente a linha com, por exemplo ^C, ), omita o READLINE_LINE=.

    • 3
  8. jamesdlin
    2020-02-29T08:36:42+08:002020-02-29T08:36:42+08:00

    Em vez de lidar com vários atalhos de teclado de linha de leitura possivelmente esotéricos, você pode editar o arquivo de histórico do seu shell diretamente. Com bash:

    1. history -w(Limpar o histórico existente)
    2. $EDITOR $HISTFILE(Edite seu arquivo de histórico ( ~/.bash_historypor padrão) e faça as alterações que desejar)
    3. history -c ; history -r(Limpe o histórico na memória do seu shell e recarregue a partir do arquivo de histórico)

    Como gosto muito de fazer ajustes no meu histórico do bash, escrevi uma função bash para torná-lo mais conveniente:

    histedit()
    {
      # Flush history.
      history -w
    
      # Open an editor at the last line.  Pipe the file into `wc` to suppress
      # printing the filename.
      #
      # Note that some versions of `wc` (e.g. BSD) do not support long options
      # and print with leading spaces.
      last_line=$(wc -l < "${HISTFILE}")
      last_line=$(( "${last_line}" ))
    
      "${EDITOR}" "+${last_line}" "${HISTFILE}"
    
      # Reload the history file.
      history -c
      history -r
    }
    

    Além disso, tenho uma função bash separada para realizar uma pesquisa rápida e substituir no meu histórico do bash para corrigir e executar novamente os comandos digitados.

    • 2
  9. WGroleau
    2020-02-29T17:53:55+08:002020-02-29T17:53:55+08:00

    Se você já digitou o segundo comando, vá para o início da linha, digite o primeiro comando e depois um ponto e vírgula para separar os dois. Isto é, se o sucesso não importa. Se isso importa, o && outra pessoa sugeriu.

    • 2
  10. Ned64
    2020-02-27T15:46:19+08:002020-02-27T15:46:19+08:00

    Não, ele não será salvo no histórico da linha de comando porque isso só aceita comandos que foram inseridos.

    Você pode, no entanto, prefixar "echo" para salvar algo que foi complicado de digitar

    echo /usr/bin/complicate -v e -r y -c o -m p -l ic -a t -t ed
    

    Em seguida, recupere o comando echo e edite para remover "echo".

    Se você precisar de algo no histórico como preparação para mais tarde, você também pode editar o arquivo de histórico, por exemplo, ~/.bash_historypara o bash ou ~/.historypara o tcsh. Edite alterando um comando existente, o que é mais fácil porque você não precisa tentar adivinhar a sintaxe do arquivo. Na próxima vez que o shell for iniciado, ele será lido (se o shell estiver configurado para salvar e ler o histórico, o que acontece por padrão na maioria dos sistemas).

    Uma terceira maneira de usar um comando complicado sem muita digitação seria definir um alias para o comando. Novamente, a sintaxe varia de acordo com a variante do shell:

    bash:

    alias ll='ls -algF --color=auto'
    

    tcsh:

    alias ll 'ls -algF --color=auto'
    

    O novo comando llfará o mesmo que digitar ls -algF --color=auto. Você pode ver os aliases existentes (por exemplo) simplesmente executando aliassem parâmetros.

    Essas linhas podem ser inseridas ~/.bashrce ~/.tcshrc, respectivamente, para salvá-las para todas as próximas inicialização do shell.

    • 1

relate perguntas

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • Instale várias distribuições Linux em paralelo

  • Fazendo mysql CLI me pedir uma senha interativamente

  • O OpenVPN auto-compilado não inicia a partir do systemd

  • Pub / sub de linha de comando sem um servidor?

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

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

    • 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

    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
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • 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
    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

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