Como salvar um comando que você digitou sem executá-lo? [duplicado]

49

Todo usuário de Linux experimentou essa coisa irritante: você começa a digitar um comando longo e entediante, então percebe que deveria ter executado outro antes. Como salvar o primeiro para executá-lo depois?

Exemplo

Você começa a digitar

mycommand -a -F --conf /very/long/path --and /another/one /input/file.txt

Mas antes de pressionar "Enter", você percebe que deveria ter feito cp f.txt /input/file.txt no começo.

Então, você está preso com o seu comando, e se você não pressionar Enter , você não poderá recuperá-lo usando seu histórico bash.

Qual é a melhor maneira de lidar com isso?

    
por user74488 04.07.2014 / 13:58

5 respostas

50

Pressione CTRL - U (kill line - isso salva a linha no kill-ring do shell), faça o que você precisa fazer, então no novo prompt, aperte CTRL - Y (arranque de kill-ring) para recuperar o comando original.

Como alternativa, e isso é particularmente útil se você estiver em um comando aninhado, como um loop while ou for , pressione CTRL - C , que adiciona o comando ao histórico sem executá-lo e limpa a linha, para que você possa recuperá-lo usando o mecanismo de histórico do shell quando estiver pronto para usá-lo.

    
por 04.07.2014 / 14:06
28

Comente a linha e pressione Enter

Ctrl - A
#
Digite

para manter a linha no histórico

    
por 04.07.2014 / 14:06
26

Esc - # é como colocar um # no começo e pressionar Enter :

Exemplo:

$ find /{,usr/}{,s}bin/ -type f -ls | awk '$3~/^...s/' | nl

( Esc - # )

$ #find /{,usr/}{,s}bin/ -type f -ls | awk '$3~/^...s/' | nl
$ _

Funciona no Bash e no shell Korn.

    
por 04.07.2014 / 16:07
5

Com zsh no modo emacs, Alt + Q ou Ctrl + Q ( push-line widget), empurra a linha de comando atual em uma pilha (salva para mais tarde) e limpa o buffer de entrada atual.

Em seguida, você pode inserir outro comando, após o qual o último comando push é trazido de volta (retirado dessa pilha).

    
por 04.07.2014 / 20:49
1

Se você deseja salvar o comando, geralmente faço o que Emmanuel sugeriu. Mas se você quiser apenas inserir outro comando antes do atual, não será necessário salvá-lo. Vá para o início da linha, digite o outro comando e adicione um ponto e vírgula.

Ctrl - A cp f.txt /input/file.txt ; Entrar

Isso deve executar os dois comandos, na ordem que você deseja. Além do mais, ele será salvo em seu histórico juntos, portanto, se no futuro você quiser fazer o segundo comando novamente e chegar nele com Ctrl - R , você veja o primeiro comando lá e lembre-se de que ele deve ser executado antes (no caso de você sempre precisar executar os dois juntos).

Você também pode usar && em vez de ponto-e-vírgula, se quiser que o segundo comando seja executado somente se o primeiro for bem-sucedido.

    
por 04.07.2014 / 20:36