Eu sei que:
$ command -[options] string string2
Pode ser facilmente alterado com:
$ ^string^string3
Obter:
$ command -[options] string3 string2
O que mais posso fazer com isso, como se estivesse tentando fazer duas vezes seguidas:
$ ^string3^string && ^string2^string4
ou após um comando
$ ffmpeg -i file output.mp4 && ^.mp4^.mp3
ou
$ echo blue && ^blue^red
^blue^red: command not found
não funciona
ou
$ echo blue
blue
$ ^blue^red && ^red^purple
red blueblue red^purple
não está funcionando
ou
$ echo blue
$ ^blue^red^red^purple
echo redred^purple
redred^purple
Ainda não funciona
É para um script bash, e a coisa mais curta que eu sei é ^...^...
Eu preciso de um comando curto e fácil para fazer isso,
Com estes exemplos você tem a ideia,
O que é necessário? Alguém me sugeriu:
$ echo blue && !#:s/blue/purple/ true
echo blue && echo purple && true
blue
purple
O resultado foi muito gentil com o que eu esperava, mas acabou >
e o comando não pôde ser concluído. ATUALIZAÇÃO: consertei adicionando true no final.
Esta questão estava anteriormente no StackOverflown e foi recomendado que estivesse aqui!
Clique ↑e faça o comando que você deseja alterar aparecer na linha de comando. Então Ctrl+ X, Ctrl+ Epara editá-lo em seu editor preferido.
Depende do editor e de sua familiaridade com ele com que rapidez e facilidade você pode fazer as alterações desejadas. Para executar, salve o arquivo com o nome que o editor oferece e saia do editor.
Escolha seu editor por configuração
VISUAL
ouEDITOR
variável. Deman 1 bash
:Observe que as combinações de teclas podem ser configuradas. Ctrl+ X, Ctrl+ Eé o padrão para o que estou falando.
Além disso, você pode achar isso útil: ctrl-xe sem executar o comando imediatamente
Primeiro: todos esses atalhos são para uso interativo, não para scripts. Todos eles fazem parte do sistema de histórico do bash, que normalmente é desabilitado em scripts (e provavelmente deve ser deixado desabilitado).
Segundo: A
^original^replacement
sintaxe é o que chamamos de "substituição rápida" e deve ser (como o nome indica) uma maneira rápida de executar novamente o último comando com uma simples alteração. Não é extensível além desse propósito básico - não há como fazer várias alterações com essa sintaxe. Mas você pode com a sintaxe mais geral (mas detalhada):!!
designa o último comando (na verdade, linha; veja abaixo), e você pode adicionar modificadores como:s/original/replacement/
fazer alterações. Aqui está um exemplo com duas substituições:Terceiro: como eu disse, esse recurso de recuperação e repetição de histórico realmente funciona em linhas (ou comandos de várias linhas), não em comandos simples. Aqui está um exemplo disso:
Observe que
!!:s/command/line/
não relembrou o comando anterior,echo "command three"
, ou mesmoecho "command two"
, mas toda a linha anterior! Além disso, embora tenhacommand
ocorrido duas vezes nessa linha, a substituição foi realizada apenas uma vez. Se você deseja que todas as ocorrências sejam substituídas ("substituição global"), adicione og
modificador (!!:gs/original/replacement/
). Existem vários outros modificadores que você pode usar.Finalmente: isso pode ficar complicado e é fácil prever mal o que vai acontecer quando você pressionar Enter. A sugestão de Kamil Maciorowski de recuperar e editar interativamente o comando anterior permite que você veja o comando antes de pressionar o retorno, então eu recomendaria esse método.
Na verdade, o que eu costumo fazer é pressionar a seta para cima para obter o comando anterior de volta e, em seguida, usar o recurso de edição de linha integrado do bash para fazer as alterações desejadas.