Salvar comando no histórico sem executar no bash

8

Existe uma maneira de salvar um comando no histórico do bash sem executá-lo? por exemplo

$ cmd [a long list of arguments] 

e agora, durante a digitação, lembro que gostaria de fazer outra coisa primeiro. Posso ter algo como

$ cmd [a long list of arguments][some-key-strokes]

e isso realmente não é executado, mas entra no histórico do bash para que eu possa usá-lo mais tarde?


fonte
5
Nessa situação, apenas prefixo a linha com #e pressione Enter.
91313 Oliver Charlesworth

Respostas:

5

Pode haver uma maneira melhor, mas você pode usar o :pmodificador de expansão do histórico para imprimir a linha de comentários atual sem executar. !#é a linha atual e, %por si só, não corresponderá a nada

$ cmd [arguments] !#%:p
Comprimidos de explosão
fonte
legal! ;) E sem necessidade de escapar caracteres especiais no comando que pode ficar confuso se o comando não é apenas ls -alum
legal! muito arrumado #
8

Use a -sopção para o historycomando:

history -s cmd arg1 arg2

A chamada para history -ssi mesma, convenientemente, não é adicionada ao histórico de comandos; portanto, no seu histórico, parece que você executou cmdsem realmente fazer isso.

chepner
fonte
legal! isso também é incrível
1

Geralmente isso é feito por

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Observe que o nome do histórico pode diferir no seu sistema. Portanto, você pode usar o HISTFILEambiente var

o que faz o:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"
hek2mgl
fonte
1

Normalmente eu apenas adiciono um # no início da linha para transformar a linha em um comentário:

#cmd [a long list of arguments] 

Eu prefiro assim, porque você pode fazer isso com apenas 3 [4 se precisar de SHIFT para inserir #] pressionamentos de tecla

^a#<ENTER>

^ a vai para o início da linha atual

# adiciona o comentário

ENTER executa o comentário

user3726536
fonte
0

Nessa situação, apenas prefixo a linha com # e, em seguida, pressione Enter.

... ou use a combinação de teclas: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Veja também: Bash - salvar comando sem executá-lo


fonte
0

Você pode tentar adicionar um espaço e | (pipe) no final da linha, pressionando enter e, em seguida, pressione Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

O comando estará no seu histórico com um | no final (pode simplesmente remover com backspace) em vez de um # no início (potencialmente mais tedioso de remover).

AVISO LEGAL: Eu não sei se isso sempre funciona! Use por sua conta e risco!

$ cmd [lista longa de argumentos] |

> Ctrl+C

$ Up

$ cmd [lista longa de argumentos] |

Josiah Krutz
fonte
0

Você pode tentar usar esta linha:

history -s -p $COMMAND

De help:

The -p option means to perform
history expansion on each ARG and display the result,

Isso significa que você pode expandir coisas como !!e armazenar o resultado no fundo da história.

Felipe Alvarez
fonte
history -sfoi dada em uma resposta há dois anos. Isso -pmelhora nisso? O que -pfaz? (Na medida em que faça sentido, edite sua resposta para torná-la melhor e não responda a meu comentário com outro comentário.)
G-Man diz 'Reinstate Monica'
0

Outra opção é ir para o início da linha e fazer o que você faria, seguido por &&, como

rm old_file && cmd [args]

Portanto, se a coisa que você deseja fazer for bem-sucedida, seu comando será executado imediatamente depois e, se falhar, o comando não será executado, mas estará no histórico. Você também pode fazer

test && cmd [args]

Como o teste sem argumentos falhará, mas este é um punhado de pressionamentos de tecla extras em comparação com o #método.

Nickolai
fonte