Minha resposta oferece um comando simples em três sintaxes diferentes, que funcionam igualmente, mas uma é um pouco mais curta e mais fácil de digitar que a segunda. A terceira variação é um apelido, ou seja, você pode atribuir um nome personalizado ao comando e chamá-lo executando isso sem precisar se lembrar de coisas complexas.
Preparação:
Primeiro, instale o pacote xselque permite acessar a área de transferência do X a partir do terminal:
sudo apt-get install xsel
Variação de comando 1 (curta):
Depois disso, você pode digitar a seguinte linha para copiar o comando anterior para a área de transferência:
xsel -ib <<<!!:q
Se você deseja copiar o segundo comando mais recente, substitua !!por !-2, pelo terceiro uso mais recente !-3e assim por diante.
Para explicar o que você está executando, aqui está um breve detalhamento do comando:
xselé uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on
- line ou executando man xsel.
- O
-iparâmetro diz xselpara ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-bparâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
<<<é uma sintaxe especial do Bash chamada "Here String".
Basicamente, expande (não avalia!) O argumento (apenas um!) Depois dele e o redireciona como string para o stdin (entrada padrão) do comando antes / depois do qual está.
!!:qé chamado de "comando bang" para expansão do histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.
Para obter mais informações, leia a página de manual local executando man history(a página de manual on-line não é útil).
- A
!!representa a linha de comando anterior e é um sinônimo para !-1.
Obviamente !-2significa então a segunda última linha de comando. Não esqueça o sinal de menos -, caso contrário, ele retornará o 2º (3º / ...) comando que você já digitou.
- Ele
:qmodifica o comando bang e diz ao bash para incluir a substituição entre aspas simples ( ') para impedir uma expansão adicional pelo shell.
Variação de comando 2 (um pouco mais):
echo !!:q | xsel -ib
echo tem o trabalho simples de imprimir todos os seus argumentos no stdout do terminal.
!!:qé chamado de "comando bang" para expansão do histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.
- A
!!representa a linha de comando anterior e é um sinônimo para !-1. Obviamente !-2significa então a segunda última linha de comando. Não esqueça o sinal de menos -, caso contrário, ele retornará o 2º (3º / ...) comando que você já digitou.
- Ele
:qmodifica o comando bang e diz ao bash para incluir a substituição entre aspas simples ( ') para impedir uma expansão adicional pelo shell.
|é um cano. Ele redireciona a saída do terminal ("stdout") do comando antes para a entrada do terminal ("stdin") do comando após ele.
xselé uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on
- line ou executando man xsel.
- O
-iparâmetro diz xselpara ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-bparâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
Variação de comando 3 (alias):
Um alias do bash é uma coisa interessante se você não quer se lembrar de comandos longos ou complicados que costuma usar. Você pode atribuir esse comando a um nome alternativo simples, que pode ser executado em vez do comando longo para obter o mesmo.
Infelizmente, como os comandos bang são um recurso especial do Bash e são expandidos antes que os alias sejam resolvidos, você não pode simplesmente alias uma das variações acima, porque a !!peça não funcionará. Há uma solução alternativa.
Para definir o alias, execute a seguinte linha no seu terminal. Observe que você pode escolher qualquer nome de variável Bash válido em vez de copylastcommand:
alias copylastcommand='history -p \!\! | xsel -ib'
No entanto, isso só é persistente na sua sessão atual do Bash, o que significa que o alias desaparecerá depois que você fechar a janela do terminal. Você pode torná-lo persistente em todas as suas sessões do Bash adicionando esta linha acima ao final do seu ~/.bashrcarquivo ou ao seu ~/.bash_aliasesarquivo, se você tiver uma.
Novamente, uma breve quebra de linha:
alias name='command'é a sintaxe para definir um alias no Bash. O commandserá executado sempre que você executar a namepartir de agora.
history -p \!\!envia a linha de comando executada anteriormente para stdout (saída padrão). Sem a -popção, ele não apenas imprimiria, mas também executaria o comando novamente.
Observe que precisamos escapar do bangs ( !) com barras invertidas ( \), porque, caso contrário, o bash os expandiria quando tentamos definir o alias, o que não faz sentido, pois eles precisam estar no alias como estão.
Novamente, você também pode especificar o [n] -ésimo comando recente substituindo o segundo retorno por -n, por exemplo \!-2.
|é um cano. Ele redireciona a saída padrão ("stdout") do comando antes dele para o padrão do terminal ("stdin") do comando após ele.
xselé uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on
- line ou executando man xsel.
- O
-iparâmetro diz xselpara ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-bparâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
<<<"!!" xsel -ib