Você deve ler o man bash no seu sistema, particularmente a seção Readline , pois esse é o mecanismo de entrada interativo do bash. O manual do Bash em gnu.org tem uma boa seção sobre Edição de Linha de Comando que ajudará a preencher algumas das lacunas.
Por padrão, você pode usá-los para percorrer a linha de comando (apenas listando alguns aqui; consulte o link para obter uma lista completa):
- Ctrl+ amove para o início da linha (ou Homedependendo das configurações do terminal)
- Ctrl+ emove para o final da linha (ou End...)
- Meta+ favança uma "palavra"
- Meta+ bretrocede uma "palavra"
Você pode usá-los para "matar" (também conhecido como "cortar") o texto de uma linha:
- Ctrl+ kmata ("corta") o texto da posição atual do cursor até o final da linha
- Ctrl+ ypuxa ("cola") o texto morto mais recentemente para o buffer no cursor
Assim, você pode combiná-las para selecionar um pedaço de alguma linha de comando que deseja repetir, eliminá-la e colá-la no final do seu próximo comando.
Agora, para torná-lo ainda mais divertido, vamos considerar a expansão do histórico do bash . É isso !!
que a resposta de Studer menciona . A expansão do histórico divide-se em designadores de eventos , designadores de palavras e modificadores .
Os designadores de eventos têm esta aparência (novamente, veja os links para a lista completa):
!
- inicia uma substituição do histórico
!n
- o n-ésimo comando na lista de histórico do bash, para algum número inteiro n (funciona também para negativos)
!!
- o comando anterior; equivalente a!-1
!string
- o comando mais recente começando com string
Designadores de palavras selecionam determinadas partes de um evento. Use :
para separar o evento do designador de palavras. As palavras são numeradas de 0 a partir do início da linha e inseridas na linha atual, separadas por espaços únicos.
$
- designa o último argumento (por exemplo, !!:$
é o último argumento do último comando; pode ser reduzido para !$
)
n
- designa a n-ésima palavra (por exemplo, !str:2
é o segundo argumento do comando mais recente que começa com str ; !!:0
é o comando do último comando)
Portanto, para acompanhar o seu exemplo, se o seu último comando for mkdir /some/really/long/path
, apenas a execução !!
executará o comando novamente. Mas você deseja cd
seguir esse caminho:
$ cd !$
Agora, digamos que você execute alguns outros comandos e, em seguida, deseje voltar ao caminho novamente. Se esse foi o último comando mkdir que você executou, você pode usá-lo para repetir esse caminho:
$ tar czf ~/foo.tgz !mkdir:$