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 assim chamado alias, o que significa que você pode atribuir um nome personalizado ao comando e chamá-lo executando-o sem ter que se lembrar das coisas complexas.
Preparação:
Primeiro, instale o pacote xsel
, que permite acessar a área de transferência 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ê quiser copiar o segundo comando mais recente, substitua !!
por !-2
, para o terceiro uso mais recente !-3
e assim por diante.
Para explicar o que você está executando, aqui está um pequeno resumo do comando:
-
xsel
é uma ferramenta de linha de comando para acessar as áreas de transferência X.
Para mais informações, leia a manpage online ou executandoman xsel
.- O parâmetro
-i
informaxsel
para ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-b
especifica a utilização da área de transferência em vez das seleções "primária" ou "secundária" do X.
- O parâmetro
-
<<<
é uma sintaxe especial de Bash chamada "Here String".
Ele basicamente expande (não avalia!) O argumento (somente um!) Após ele e o redireciona como string para o stdin (entrada padrão) do comando antes / depois do qual ele permanece. -
!!:q
é chamado de "comando bang" para expansão de histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.
Para mais informações, leia a página de manual local executandoman history
(a página de manual online não é útil).- O
!!
representa a linha de comando anterior e é sinônimo de!-1
.
Obviamente!-2
significa então a segunda última linha de comando. Não se esqueça do sinal de menos-
, caso contrário ele retornará o segundo (3º / ...) comando que você já digitou. - O
:q
modifica o comando bang e informa ao bash para incluir a substituição entre aspas simples ('
) para evitar expansão adicional pelo shell.
- O
Variação de comando 2 (um pouco mais longa):
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 de histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.- O
!!
representa a linha de comando anterior e é sinônimo de!-1
. Obviamente!-2
significa então a segunda última linha de comando. Não se esqueça do sinal de menos-
, caso contrário ele retornará o segundo (3º / ...) comando que você já digitou. - O
:q
modifica o comando bang e informa ao bash para incluir a substituição entre aspas simples ('
) para evitar expansão adicional pelo shell.
- O
-
|
é um canal. Ele redireciona a saída do terminal ("stdout") do comando antes dele para a entrada do terminal ("stdin") do comando após ele. -
xsel
é uma ferramenta de linha de comando para acessar as áreas de transferência X.
Para mais informações, leia a manpage online ou executandoman xsel
.- O parâmetro
-i
informaxsel
para ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-b
especifica a utilização da área de transferência em vez das seleções "primária" ou "secundária" do X.
- O parâmetro
Variação de comando 3 (alias):
Um pseudônimo bash é uma coisa legal se você não quiser lembrar de comandos longos ou complicados que você usa com frequência. Você pode atribuir este comando a um nome de alias simples, que pode ser executado em vez do comando longo para obter o mesmo.
Infelizmente, como os comandos bang são um recurso Bash especial e são expandidos antes que os aliases sejam resolvidos, você não pode simplesmente aliasar uma das variações acima porque a parte !!
não funcionará. Existe 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 de Bash válido em vez de copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
No entanto, isso é apenas persistente para sua sessão atual do Bash, o que significa que o alias desaparece depois que você fecha a janela do terminal. Você pode torná-lo persistente em todas as suas sessões Bash adicionando esta linha acima ao final do seu arquivo ~/.bashrc
, ou ao seu arquivo ~/.bash_aliases
se você tiver um.
Novamente, um breve intervalo da linha:
-
alias name='command'
é a sintaxe para definir um alias no Bash. Ocommand
será executado sempre que você executarname
a partir de agora. -
history -p \!\!
exibe a linha de comando executada anteriormente para stdout (saída padrão). Sem a opção-p
, ela não só imprimiria como também executaria o comando novamente.
Note que precisamos escapar da franja (!
) com barras invertidas (\
), porque do contrário o bash iria expandi-las quando tentássemos definir o alias, o que não faz sentido, já que elas precisam estar no alias
Novamente, você também pode especificar o comando [n] -th recent substituindo o segundo com-n
, por exemplo.\!-2
. -
|
é um canal. Ele redireciona a saída padrão ("stdout") do comando antes para o padrão de terminal ("stdin") do comando após ele. -
xsel
é uma ferramenta de linha de comando para acessar as áreas de transferência X.
Para mais informações, leia a manpage online ou executandoman xsel
.- O parâmetro
-i
informaxsel
para ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-b
especifica a utilização da área de transferência em vez das seleções "primária" ou "secundária" do X.
- O parâmetro