it-swarm-pt.tech

colocar o comando history na linha de comando sem executá-lo

Eu uso! N onde (n) é o número da linha para executar uma linha no arquivo de histórico que eu quero que seja executado no prompt de comando que eu encontro através do histórico | menos.

Mas há um evento do histórico da linha de comando que desejo modificar manualmente. Como posso inserir na linha de comando o conteúdo de um histórico sem que ele realmente seja executado, para que eu possa modificar e pressionar retornar?

Melhor,

59
Vass

Para solicitar que o comando seja impresso em vez de executado após a substituição do histórico, adicione o :pmodificador , por exemplo !42:p. O comando resultante também será inserido no histórico, para que você possa pressionar Up para editá-lo.

Se você tiver o histverifyopção definido (shopt -s histverify), você sempre terá a oportunidade de editar o resultado das substituições do histórico.

O fc builtin fornece acesso limitado à expansão do histórico (sem designadores do Word) e permite editar um comando anterior em um editor externo.

Você pode usar !prefix para se referir ao último comando que começa com prefix e !?substring para se referir ao último comando que começa com substring. Quando você sabe o que está procurando, isso pode economizar muito tempo history | less.

Outra maneira de pesquisar no histórico anterior é a pesquisa incremental: pressione Ctrl+R e comece a inserir uma substring do que você está procurando. pressione Ctrl+R para ir para a ocorrência anterior da sequência de pesquisa até agora e Ctrl+S se você foi longe demais. A maioria das teclas que não Ctrl+RCtrl+SBackspace e caracteres comuns encerram a pesquisa incremental e têm seu efeito usual (por exemplo, teclas de seta para mover o cursor na linha que você alcançou, Enter para executar o comando).

73

Outro pequeno: Alt+#

comenta a linha atual e a move para o buffer do histórico.

Portanto, quando você monta uma linha de comando e precisa emitir um comando provisório para, por exemplo, encontre um arquivo, você apenas clica Alt+#, emita o outro comando, suba no histórico, remova o comentário e prossiga.

15
Rahul Patil

Você pode usar o espaço mágico para expandir a história antes de pressionar Enter. No seu .inputrc, mapeie o espaço para o espaço mágico:

$if Bash
     Space: magic-space
$endif

Agora, sempre que você digitar um espaço após uma especificação de histórico, ele será imediatamente expandido - útil se você quiser editá-lo também!

7
Cascabel

Dê uma olhada no history-expand-line comando, vinculado a Alt+^ por padrão. Ele expandirá a linha no local, que você poderá editar.

7
Alex Barrett

Usando Ctrl+r você pode pesquisar no histórico:

[email protected] ~ $ 
(reverse-i-search)`xran': xrandr -o normal

Qualquer comando encontrado pode ser editado ...


Acho que encontrei exatamente o que você precisa: execute shopt -s histverify e na próxima vez em que você quiser usar !n comando não será executado, mas apenas colocado na linha de comando ...

4
pbm

Eu sempre quis isso. Quando usei csh (e tcsh), tive um idioma:
!:88*:p

Esse idioma insere "Word 88 até a última Word" do comando anterior no ponto em que você está digitando na linha de comando atual, que geralmente é o fim. No csh, não é um erro que essa expressão não produza palavras. Ou seja, não precisa haver uma Palavra 88, nem qualquer uma que a siga. Se não houver o Word 88, isso não adiciona palavras ao final do comando que está sendo digitado e empurra a linha de comando resultante para o histórico sem execução.

Como você deve saber,
*! (como !! e! -1) é o comando anterior;
*: 88 é o Word 88 (a primeira Palavra - normalmente o comando - é zero) e o csh exigiria que esse Word existisse, mas ...
*: 88 * são todas as palavras que começam no Word 88 e, em seguida, csh não requer que a Palavra exista;
*: p significa imprimir, mas não executa a linha de comando.
Com ou sem o: p, a linha de comando é adicionada ao histórico de comandos.

"Por que 88?" você se pergunta? Porque é a mesma chave que * preciso. Se você possui comandos por tanto tempo, talvez!: 888 *: p é o que você precisa. Desculpe, isso não funciona com o bash AFAIK. Bash apenas dirá bash: :88*: bad Word specifier

Curiosidade: seu comando geralmente não precisa ser o primeiro.
> /tmp/foo echo My command is Word 3
é válido no bash e no csh.

1
W Dean Stanton

Eu normalmente uso Ctrl+r para pesquisar e depois Ctrl+e para ir até o final da linha sem executar.

0
nikc