Você deve ler o homem bash em seu sistema, particularmente a seção sobre Readline , pois este é o mecanismo de entrada interativa do bash. O manual do Bash em gnu.org tem uma boa seção em Commandline Editing que ajudará a preencher algumas das lacunas.
Por padrão, você pode usá-los para se mover a linha de comando (listando apenas alguns aqui; veja o link para uma lista completa):
-
Ctrl + a move para o início da linha (ou Início dependendo das configurações do terminal)
-
Ctrl + e move para o final da linha (ou End ...)
-
Meta + f avança uma "palavra"
-
Meta + b move para trás uma "palavra"
Você pode usá-los para o texto "kill" (também conhecido como "cut") de uma linha:
-
Ctrl + k mata o texto ("cortes") da posição atual do cursor para o final da linha
-
Ctrl + y yanks ("pastas") o texto mais recentemente eliminado de volta ao buffer no cursor
Então você pode combiná-los para selecionar um pedaço de alguma linha de comando que você deseja repetir, matá-lo e colá-lo no final do próximo comando.
Agora, para torná-lo ainda mais divertido, consideremos a Expansão do Histórico . Isso é que !!
que A resposta de Studer menciona . A expansão do histórico é dividida em designadores de evento < a designadores de palavras , e modificadores .
Os designadores
Event se parecem com isso (novamente, veja os links para a lista completa):
-
!
- inicia uma substituição de histórico
-
!n
- o comando n-th na lista de histórico do bash, para algum inteiro n (funciona para negativos também)
-
!!
- o comando anterior; equivalente a !-1
-
!string
- o comando mais recente que começa com string
Os designers do
Word selecionam certas 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 simples.
-
$
- designa o último argumento (por exemplo, !!:$
é o último argumento do último comando; pode ser encurtado para !$
)
-
n
- designa a palavra n-és (por exemplo, !str:2
é o segundo argumento do comando mais recente, começando com str ; !!:0
é o comando do último comando)
Portanto, para acompanhar seu exemplo, se seu último comando for mkdir /some/really/long/path
, apenas a execução de !!
executará novamente esse comando. Mas você deseja cd
nesse caminho:
$ cd !$
Agora, digamos que você execute alguns outros comandos e, em seguida, queira voltar a esse caminho novamente. Se esse foi o último comando mkdir que você executou, você pode usar isso para repetir esse caminho:
$ tar czf ~/foo.tgz !mkdir:$