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 xsel
que 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 !-3
e 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
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâ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 !-2
significa 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
:q
modifica 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 !-2
significa 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
:q
modifica 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
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâ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 ~/.bashrc
arquivo ou ao seu ~/.bash_aliases
arquivo, se você tiver uma.
Novamente, uma breve quebra de linha:
alias name='command'
é a sintaxe para definir um alias no Bash. O command
será executado sempre que você executar a name
partir de agora.
history -p \!\!
envia a linha de comando executada anteriormente para stdout (saída padrão). Sem a -p
opçã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
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
<<<"!!" xsel -ib