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 executando man xsel.- O parâmetro
-iinformaxselpara ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-bespecifica 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!-2significa 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
:qmodifica 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
-
echotem 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!-2significa 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
:qmodifica 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 executando man xsel.- O parâmetro
-iinformaxselpara ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-bespecifica 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. Ocommandserá executado sempre que você executarnamea 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 executando man xsel.- O parâmetro
-iinformaxselpara ler a partir do stdin (geralmente isso significa entrada de teclado, mas vamos redirecionar algo aqui) - O parâmetro
-bespecifica a utilização da área de transferência em vez das seleções "primária" ou "secundária" do X.
- O parâmetro